哪些字段是两个表
问题描述:
我有两个列表(我已经投入两个表)之间的独特之处:哪些字段是两个表
-
Table1
包含field1
是标识符的列表, -
Table2
包含field2
,是另一种标识符列表。
我想运行一个查询,会告诉我什么标识符是两个表之间唯一的,即他们要么只或Table2.field2
只,而不是在无论是在Table1.field1
。
答
一种可能的方式做到这一点:
- 执行表之间的
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;
另一种方法来做到这一点。之后的结果集上联:
- 其中FIELD1没有出现在表2表1的记录 表2的
- 记录,其中场2没有出现在表1
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','左加入'。这么多选择。你有什么尝试? –
这是一个奇怪的近距离投票,我对一个人不同意。重新投票。 –