我的table1有3个数字,table2有1个数字:
table1 table2
n n
1 1
2
3
我想从table1中选择table2中不存在的数据(numbes 2和3)。我试过了:
select table1.* from table1, table2 where table1.n <> table2.n
我还尝试了其他where子句:
where table1.n not like table2.n
where not table1.n = table2.n
但我没有得到结果。我知道它可以通过多个步骤完成,但我想知道是否有一个简单的查询来执行它。感谢
答案 0 :(得分:1)
您需要执行LEFT JOIN并查找t2的空值。像这样:
SELECT
t1.n
FROM
table1 AS t1
LEFT JOIN table2 AS t2
ON t1.n = t2.n
WHERE
t2.n IS NULL
这里链接到不同种类的JOINS的很好的参考,其中包括维恩图,以帮助您可视化不同的加入方法。
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
答案 1 :(得分:0)
你可以使用NOT IN或NOT EXISTS来做到这一点。
select * from table1
where table1.n not in (select table2.n from table2);
select * from table1
where not exists (select table2.n from table2 where table2.n = table1.n);
答案 2 :(得分:0)
我尝试了两种方法(左连接而不是进入)几次,它花了相同的时间(我的桌子非常大)。谢谢你们!