我有两个列表(我已将其放入两个表中):
Table1
包含field1
,是一个标识符列表Table2
包含field2
,是另一个标识符列表。我想运行一个查询,告诉我两个表之间的标识符是唯一的,即它们只在Table1.field1
或仅在Table2.field2
,而不是在两者中。
答案 0 :(得分:1)
最简单的解决方案是
(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
答案 1 :(得分:1)
答案 2 :(得分:0)
一种可能的方法:
FULL OUTER JOIN
,将Table1.field1
与Table2.field2
相关联,然后WHERE
子句才能选择Table1.field1
为NULL或Table2.field2
为NULL的行SELECT
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)