我正在比较两个具有相同列的表,只是方法有所不同。
例如。
表1
id roll no
1 123456 same-ignore
2 123457 different
3 123458 same-ignore
4 123879 different
5 123888 same-ignore
table2
id roll no
1 123456 same-ignore
2 123467 different
3 123458 same-ignore
4 123852 different
5 123888 same-ignore
我也遵循以下示例,但未实现结果。
SQL how to compare two columns from two different tables
comparing columns in two different tables
Comparing two columns in two different tables?
Compare a column in two different tables
此查询的第一个输出。
select distinct roll no from table2 where rollno not in (select roll no from table1)
我不能对第二个输出做同样的事情,这意味着我无法将table1与table2区分(返回空行)
我如何实现?
输出1 :(不在表1中)
123467
123852
输出2 :(不在table2中)
123457
123879
答案 0 :(得分:2)
使用左右联接 用于输出1
select t2.roll from table1 t1
right
join table2 t2 on t1.roll=t2.roll
where t1.roll is null
对于输出2
select t1.roll from table1 t1
left
join table2 t2 on t1.roll=t2.roll
where t2.roll is null
答案 1 :(得分:0)
如果您想让table1
中的卷不在table2
中,您可以这样做
SELECT roll FROM table1
WHERE roll NOT IN
(
SELECT DISTINCT roll FROM table2
);
UNION
SELECT roll FROM table2
WHERE roll NOT IN
(
SELECT DISTINCT roll FROM table1
);
相反,如果您正在寻找行之间不匹配的滚动对(第一对第一对,第二对第二对……),则可以使用简单的JOIN
:
SELECT t1.roll
FROM table1 t1 JOIN table2 t2 ON t1.id == t2.id
WHERE t1.roll <> t2.roll