我有两个表,表A和表B具有相同的列名。我想获取表A中不存在但存在于表B中的那些记录。
提前致谢。
答案 0 :(得分:1)
使用左连接
Select * from tableb left join tablea on tableb.column = tablea.coulmn where tablea.column is null
答案 1 :(得分:0)
某些数据库支持except
或minus
。但不是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));
}
如果您的表没有主键或它们不匹配 - 您可以将查询更改为表结构。