我有兩個列表(我已經投入兩個表)之間的獨特之處:哪些字段是兩個表
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','左加入'。這麼多選擇。你有什麼嘗試? –
這是一個奇怪的近距離投票,我對一個人不同意。重新投票。 –