MySQL:选择两个表之间不常见的数据

时间:2014-03-12 18:27:04

标签: php mysql sql

我的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

但我没有得到结果。我知道它可以通过多个步骤完成,但我想知道是否有一个简单的查询来执行它。感谢

3 个答案:

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

我尝试了两种方法(左连接而不是进入)几次,它花了相同的时间(我的桌子非常大)。谢谢你们!