我有两个列表(我已经投入两个表)之间的独特之处:哪些字段是两个表
Table1
包含field1
是标识符的列表,Table2
包含field2
,是另一种标识符列表。
我想运行一个查询,会告诉我什么标识符是两个表之间唯一的,即他们要么只或Table2.field2
只,而不是在无论是在Table1.field1
。
我有两个列表(我已经投入两个表)之间的独特之处:哪些字段是两个表
Table1
包含field1
是标识符的列表,Table2
包含field2
,是另一种标识符列表。我想运行一个查询,会告诉我什么标识符是两个表之间唯一的,即他们要么只或Table2.field2
只,而不是在无论是在Table1.field1
。
一种可能的方式做到这一点:
FULL OUTER JOIN
,连接Table1.field1
到Table2.field2
,并WHERE
条款,只选择行,其中任一Table1.field1
为NULL或Table2.field2
为NULLSELECT
field=ISNULL(t1.field1, t2.field2)
FROM
table1 AS t1
FULL JOIN table2 AS t2 ON
t2.field2=t1.field1
WHERE
t1.field1 IS NULL OR
t2.field2 IS NULL;
另一种方法来做到这一点。之后的结果集上联:
SELECT
field=field1
FROM
table1 AS t1
WHERE
NOT EXISTS(SELECT * FROM table2 AS t2 WHERE t2.field2=t1.field1)
UNION ALL
SELECT
field=field2
FROM
table2 AS t2
WHERE
NOT EXISTS(SELECT * FROM table1 AS t1 WHERE t1.field1=t2.field2)
最简单的解决方案是
(select * from #Table1
except
select * from #Table2)
union
(select * from #Table2
except
select * from #Table1)
例如:
Create table #Table1(Field1 varchar(100))
Create table #Table2(Field2 varchar(100))
Insert into #Table1 values
('a'),('b'),('c'),('d')
Insert into #Table2 values
('e'),('f'),('c'),('d')
------------------------
(select * from #Table1
except
select * from #Table2)
union
(select * from #Table2
except
select * from #Table1)
=>
Field1
--------
a
b
c
d
Field2
--------
e
f
c
d
output :
Field1
--------
a
b
e
f
'distinct','左加入'。这么多选择。你有什么尝试? –
这是一个奇怪的近距离投票,我对一个人不同意。重新投票。 –