如何比较不同表中的两列并在mysql中进行区分?

时间:2019-01-07 11:22:35

标签: mysql sql

我正在比较两个具有相同列的表,只是方法有所不同。

例如。

表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

2 个答案:

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