有没有办法检查并返回两个表之间不常见的所有行?
表1:
pk name date
102 John 1/1/16
101 Bob 1/1/17
表2:
pk name date
102 John 1/1/16
104 Bob 1/1/17
105 Ted 1/1/18
理想情况下,我还可以按日期限制查询。所以如果我按日期限制< 1/1/18,结果将是:
table pk name date
1 101 Bob 1/1/17
2 104 Bob 1/1/17
答案 0 :(得分:2)
select * from table1
union
select * from table2
except
(select * from table1 intersect select * from table2)
答案 1 :(得分:0)
select * from table1 t1
where not exsits (
select 1 from table2 t2 where t2.pk = t1.pk
) and t1.Date < '2018/1/1'
union all
select * from table2 t2
where not exsits (
select 1 from table1 t1 where t2.pk = t1.pk
) and t2.Date < '2018/1/1'
答案 2 :(得分:0)
您可以使用EXCEPT
,例如
select pk,
name,
date from table1
except
select pk,
name,
date from table2;
(OR)使用NOT IN
运算符和UNION
类似
select * from table1 where pk not in (select distinct pk from table2);
union
select * from table2 where pk not in (select distinct pk from table1);
答案 3 :(得分:0)
更准确地说明您的样本数据:
SELECT * FROM
(( SELECT 1 as [table],* FROM
(SELECT * FROM #TABLE_1
EXCEPT
SELECT * FROM #TABLE_2) AS Inner1)
UNION
(SELECT 2 as [table],* FROM
(SELECT * FROM #TABLE_2
EXCEPT
SELECT * FROM #TABLE_1) AS Inner2)) AS Final
WHERE Final.date < '2018-01-01'