Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取两个表之间的排除变量_Sql_Sql Server 2005_Union - Fatal编程技术网

Sql 获取两个表之间的排除变量

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

我有两个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, 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)