Sql 获取两个表之间的排除变量
我有两个sql server 2005表,如下所示:Sql 获取两个表之间的排除变量,sql,sql-server-2005,union,Sql,Sql Server 2005,Union,我有两个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 我需要一个或两个查询来获取两个表之间不在两个表中的所有变量名。例如,上述示例将使用: Table A: AGENDA, TEAC
Table A
varName varStatus
AGE Text
AGENDA Text
TEACH Text
Table B
varName varDesc
ACT Text
AGE Text
SAT Text
GPA Text
我需要一个或两个查询来获取两个表之间不在两个表中的所有变量名。例如,上述示例将使用:
Table A: AGENDA, TEACH
Table B: ACT, SAT, GPA
这是正确的,因为AGE是两个表中唯一出现的varname。此查询将提供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
如果变量可以在单个列表中,请使用带有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)
非自我:使用除外!
(SELECT varName FROM tableA EXCEPT SELECT varName FROM tableB)
UNION
(SELECT varName FROM tableB EXCEPT SELECT varName FROM tableA)