我有两个表:tableA和tableB。如何获取tableA中的所有记录,但不能获取tableB中的所有记录?我对正确的方法感兴趣,而不是解决方法。我尝试过使用左连接,然后添加where ID is not null
。它有效,但我不确定这是否是正确的方法。
答案 0 :(得分:3)
select * from tableA
where id not in (select id from tableB)
或
select * from tableA a
left join tableB b on a.id = b.id
where b.id is null
两者都是完全可以接受的方式来检索你的问题。
答案 1 :(得分:0)
如果你需要在页面上显示数据(编程),你必须使用join,如果你需要将数据从一个表移动到另一个表进行备份或其他类似的目的,你需要一个sql比较工具。 首先你需要sql left join。将表A作为左表,然后将其与B
连接select * from A
left join B on A.id = B.id
where b.id is null
答案 2 :(得分:0)
您可以使用NOT EXISTS
。我更喜欢使用NOT EXISTS
,因为当列允许空值但没有列时,NOT IN
的执行速度明显低于NOT EXISTS
。
Select * from table1 a
Where not exists (Select ID from table2 b where a.ID = b.ID)
在non-nullable
列上,您可以使用符合您情况的任何一个,因为NOT IN
和NOT EXISTS的行为和性能相同。
答案 3 :(得分:0)
Sql fiddle [] [1]
Demo http://www.sqlfiddle.com/#!3/10300/2
select * from table1 where id not in(select id from table2)
答案 4 :(得分:0)
由于您没有给出表模式,我们假设每个table.id1中都有主键.id1,id2
你可以在左连接的帮助下完成。
从table1左侧连接table2中选择*,其中id2为空
这不是一个实际的查询,只是提示你继续。