Выбрать все строки, которые отсутствуют в другой таблице - PullRequest
1 голос
/ 15 февраля 2011

Есть две таблицы: users1 и users2. У них обоих есть столбец name. Мне нужно выбрать всех пользователей из users1, которых нет в таблице users2.

Я могу только выбрать всех пользователей и перебрать их с помощью PHP, проверяя каждого во второй таблице.

Есть ли способ сделать это с помощью SQL?

Ответы [ 4 ]

6 голосов
/ 15 февраля 2011
SELECT `users1`.* FROM `users1` LEFT JOIN `users2` USING (`name`)
        WHERE `users2`.`name` IS NULL

Для максимальной производительности убедитесь, что у вас есть индекс, определенный для name в обеих таблицах.

Это также можно сделать с помощью подзапроса (как указали другие), но с объединениембудет выполняться намного быстрее.

2 голосов
/ 15 февраля 2011

Может быть, вы можете попытаться написать подзапрос, например

SELECT *
FROM Users1
WHERE Username NOT IN
(SELECT Username FROm Users2)

Надеюсь, это поможет

0 голосов
/ 15 февраля 2011
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)
0 голосов
/ 15 февраля 2011
select * from users1 where name not in (select name from users2);
...