查询输出不匹配的列名

时间:2015-04-24 19:03:20

标签: sql sql-server-2008

我有一个表格,其中有两列可以说国家,国家代码。该表可以包含多个具有相同国家/地区和代码的行。但国家和代码总是必须匹配。如何编写查询,以查找国家和国家/地区代码不匹配的所有行的列表。

如果这是表格,我希望查询返回第4行..加拿大与XYZ不匹配(它应该是CN)..有一个国家的主列表和不同表中的代码让我们说.. tblCountries。

enter image description here

2 个答案:

答案 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不会。