0

我有两个 sql server 2005 表,如下所示:

Table A
varName  varStatus
AGE      Text
AGENDA   Text
TEACH    Text


Table B
varName   varDesc
ACT       Text
AGE       Text
SAT       Text
GPA       Text

我需要一两个查询来获取两个表之间不存在于两个表中的所有 varName。例如,上面的示例将使用:

Table A:  AGENDA, TEACH
Table B: ACT, SAT, GPA

这是正确的,因为 AGE 是出现在两个表中的唯一 varname。

4

3 回答 3

0

此查询将为您提供 A 中的所有记录,但 B 中没有

SELECT A.* FROM 
A LEFT JOIN B ON A.varName = B.varName
WHERE B.varName IS NULL

同样,此查询将为您提供 B 中的记录,而不是 A 中的记录

SELECT B.* FROM 
A RIGHT JOIN B ON A.varName = B.varName
WHERE A.varName IS NULL

最后,您需要做的就是将两个查询联合起来

SELECT A.* FROM 
A LEFT JOIN B ON A.varName = B.varName
WHERE B.varName IS NULL
UNION
SELECT B.* FROM 
A RIGHT JOIN B ON A.varName = B.varName
WHERE A.varName IS NULL
于 2012-11-29T01:06:08.450 回答
0

如果变量可以在单个列表中,请使用带有 NOT IN 的 UNION

SELECT 'A' AS sourceTable, varName
FROM   tableA
WHERE  varName NOT IN (SELECT varName FROM tableB)
UNION ALL
SELECT 'B' AS sourceTable, varName
FROM   tableB
WHERE  varName NOT IN (SELECT varName FROM tableA)
于 2012-11-29T01:06:21.273 回答
0
(SELECT varName FROM tableA EXCEPT SELECT varName FROM tableB)
UNION
(SELECT varName FROM tableB EXCEPT SELECT varName FROM tableA)
于 2012-11-29T01:19:09.200 回答