选择两个表之间的不常见记录 - mysql

时间:2017-10-29 18:43:37

标签: mysql sql

我有两个表,表A和表B具有相同的列名。我想获取表A中不存在但存在于表B中的那些记录。

提前致谢。

3 个答案:

答案 0 :(得分:1)

使用左连接

Select * from tableb left join tablea on tableb.column = tablea.coulmn where tablea.column is null 

答案 1 :(得分:0)

某些数据库支持exceptminus。但不是MySQL。我建议not exists

select b.*
from b
where not exists (select 1
                  from a
                  where a.col1 = b.col1 and a.col2 = b.col2 and . . .
                 );

请注意,如果任何列的值为NULL,则无效。

如果您需要处理NULL,则可以使用(not a.col1 <=> b.col1) and (not a.col2 <=> b.col2) . . .。或者,您可以使用聚合:

select col1, col2, . . .
from ((select a.*, 1 as is_a, 0 as is_b
       from a
      ) union all
      (select b.*, 0, 1
       from b
      ) 
     ) ab
group by col1, col2, . . .
having max(is_a) = 0 and max(is_b) = 1;

答案 2 :(得分:0)

如果主键相同(例如,id字段),则假设行相同。比你可以:

for (int j = 0; j < myArray.size();) {
  System.out.println(myArray.get(j));
  int start = j;
  do {
    ++j;
  while (j < myArray.size() && myArray.get(j) <= myArray.get(start));
}

如果您的表没有主键或它们不匹配 - 您可以将查询更改为表结构。