我有一个表格,其中有两列可以说国家,国家代码。该表可以包含多个具有相同国家/地区和代码的行。但国家和代码总是必须匹配。如何编写查询,以查找国家和国家/地区代码不匹配的所有行的列表。
如果这是表格,我希望查询返回第4行..加拿大与XYZ不匹配(它应该是CN)..有一个国家的主列表和不同表中的代码让我们说.. tblCountries。
答案 0 :(得分:2)
首先,如果有另一个包含contry和代码的表,那么你打破了在另一个表中具有相同列的规范化原则。
你可以这样做:
select * from testTable tt
join Countries c on ((c.Country = tt.Country and c.Code <> tt.Code)
or (c.Code = tt.Code and c.Country <> tt.Country))
答案 1 :(得分:2)
您可以在评论中使用带有NOT EXISTS运算符的select语句,或者您可以使用左连接:
SELECT T.*
FROM MyTable T
LEFT JOIN TblCountries C ON(T.Country = C.Country AND T.CountryCode = C.CountryCode)
WHERE C.CountryId IS NULL -- Assuming you have a column by that name that's not nullable.
Giorgi Nakeuri的回答也会得到你想要的结果,但是,如果你的表中有一个记录有一个国家和代码甚至不存在于tblCountry然后Aaron& #39;答案或我的回复,但Giorgi不会。