2012-09-19 134 views
0

我有两个表,他们通过ID连接,我知道在合同表中有一些列的数据与我的保修表不匹配,即使ID是匹配的。我正在使用下面的查询,它看起来是否正确?两个表中的不匹配列

SELECT con.m_warranty_sku_id, 
     con.contract_type, 
     con.program_type, 
     con.underwriter, 
     wsk.m_warranty_sku_id, 
     wsk.contract_type, 
     wsk.program_type, 
     wsk.sku_underwriter 
FROM mdhdba.m_contract con, 
     mdhdba.m_warranty_sku wsk 
WHERE (wsk.m_warranty_sku_id = con.m_warranty_sku_id) 
     AND con.contract_type <> wsk.contract_type 
+0

你应该显式'JOIN's。 – Kermit

回答

1

是的,它是为解决方案是正确的,我调整您的查询,以明确我参加

SELECT con.m_warranty_sku_id, 
     con.contract_type, 
     con.program_type, 
     con.underwriter, 
     wsk.m_warranty_sku_id, 
     wsk.contract_type, 
     wsk.program_type, 
     wsk.sku_underwriter 
FROM mdhdba.m_contract con innerjoin mdhdba.m_warranty_sku wsk 
ON wsk.m_warranty_sku_id = con.m_warranty_sku_id 
WHERE con.contract_type <> wsk.contract_type 
0

上面的查询无法处理NULL coulmns。如果m_warranty_sku_id的行数多于一行,则会出现问题。

这样做 1.如果连接有空值,则处理NULL。 2.您可以使用MINUS和UNION子句将不匹配的m_warranty_sku_id和仅用于这些值的连接表分开。