SQL选择,匹配一列而不是另一列

时间:2011-04-01 08:42:23

标签: sql sql-server sql-server-2008

我在SQL Server 2008 R2数据库中有两个表,我们称之为A和B.它们看起来像这样

A
--------------------
GUID     Primary Key
B_GUID   Foreign Key
Value    nvarchar(50)

B
--------------------
GUID     Primary Key
Value    nvarchar(50)

我想从A

中选择所有行
  • A中的B_GUID与B
  • 中的GUID相匹配
  • A中的值与B
  • 中的Value不匹配

但是,我无法弄清楚SQL。有帮助吗? :)谢谢

4 个答案:

答案 0 :(得分:5)

怎么样:

SELECT A.*
FROM dbo.A
INNER JOIN dbo.B ON A.B_GUID = B.GUID
WHERE
    A.Value <> B.Value

INNER JOIN将这两个表放在一起,在这两个列的相等性上,WHERE子句将其进一步限制为仅适用于该条件的两行。

答案 1 :(得分:3)

select 
  A.*
from
  A
join
  B on A.B_GUID = B.GUID and A.Value <> B.Value

答案 2 :(得分:0)

SELECT * 
FROM A 
LEFT JOIN B
ON A.B_GUID = B.GUID  WHERE A.Value <> B.Value;

这未经过测试但应该有效

答案 3 :(得分:0)

请注意,根据具体情况,上述答案可能存在缺陷:假设您有以下记录,即使由于其他无匹配记录而存在匹配记录,您会发现输出不匹配。

TABLE 1     
GUID    B_GUID  VALUE
101 201 X
102 201 Y

TABLE2      
GUID    VALUE   
201 Y   
201 X   

解决此问题的另一种方法是使用EXCEPT子句查询。