选择其他表中不存在的所有行

时间:2011-02-15 08:21:50

标签: mysql left-join

有两个表:users1users2。它们都有name列。我需要从users1表中选择users2中不存在的所有用户。

我只能选择所有用户并通过PHP迭代它们,检查第二个表中的每个用户。

有没有办法通过SQL做到这一点?

4 个答案:

答案 0 :(得分:6)

SELECT `users1`.* FROM `users1` LEFT JOIN `users2` USING (`name`)
        WHERE `users2`.`name` IS NULL

为了获得最佳性能,请确保在两个表中name都定义了索引。

这也可以通过子查询来完成(正如其他人指出的那样),但是连接的执行速度会快得多。

答案 1 :(得分:2)

也许您可以尝试编写像

这样的子查询
SELECT *
FROM Users1
WHERE Username NOT IN
(SELECT Username FROm Users2)

希望这可以提供帮助

答案 2 :(得分:0)

select * from users1 where name not in (select name from users2);

答案 3 :(得分:0)

SELECT * FROM users1 WHERE name NOT IN(SELECT name FROM users2)

根据您的RMDB和此表中的数据,您可能希望将所有名称都改为小写:

SELECT * FROM users1 WHERE LOWER(name) NOT IN(SELECT LOWER(name) FROM users2)