两个表之间哪些字段是唯一的

时间:2017-08-01 12:31:16

标签: sql-server tsql sql-server-2016

我有两个列表(我已将其放入两个表中):

  • Table1包含field1,是一个标识符列表
  • Table2包含field2,是另一个标识符列表。

我想运行一个查询,告诉我两个表之间的标识符是唯一的,即它们只在Table1.field1或仅在Table2.field2,而不是在两者中。

3 个答案:

答案 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)

奇特的(不是最短的,也许不是最简单的)基于全集的解决方案: SELECT * FROM (SELECT field1 从表1 除了 SELECT field2 从表2)R1 UNION ALL SELECT * FROM (SELECT field2 从表2 除了 SELECT field1 从表1)R2   第一个结果集 - 表1      第二个结果集 - 表2      第3个结果集 - 输出 - (唯一标识符 - 仅在field1中或仅在field2中,不在两者中)

答案 2 :(得分:0)

一种可能的方法:

  • 在表格之间执行FULL OUTER JOIN,将Table1.field1Table2.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;

另一种方法。以下结果集的并集:

  • 表1的记录,其中field1未出现在表2中
  • 表2的记录,其中field2未出现在表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)