有两个表:users1
和users2
。它们都有name
列。我需要从users1
表中选择users2
中不存在的所有用户。
我只能选择所有用户并通过PHP迭代它们,检查第二个表中的每个用户。
有没有办法通过SQL做到这一点?
答案 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)