Поиск записей в таблице, которых нет в другой таблице
Может название немного непонятное, или запутанное, но суть такова, что у нас есть таблица A в которой есть записи 1,2,3,4,5,6 и есть таблица B в которой есть записи 1,4,5. Нам нужно выполнить запрос что бы в результате у нас записи в таблице В были исключены из таблицы А. В итоге мы должны получить 2,3,6. Для этого необходимо выполнить такой запрос
SELECT DISTINCT tbl.id FROM tbl WHERE tbl.id NOT IN ( SELECT test.id FROM test); |
Пишу на PHP, работаю с различными CMS, люблю решать сложные задачи.
noby
20 Feb, 2009
Лучше переделать запрос на такой
SELECT distinct id
FROM tbl t1
WHERE NOT EXISTS (SELECT 1
FROM texts t2
WHERE t1.id = t2.id
);
И в таблице test должен быть обязательно индекс по полю id.
noby
20 Feb, 2009
Виноват, в MySQL вариант автора быстрее
skie
9 мая, 2009
а как насчет такого?
SELECT DISTINCT tbl.id
FROM tbl
left join test on (tbl.id = test.id)
WHERE test.id is null
Lion__
16 мая, 2010
skie правильно написал запрос, в вашем варианте выполняется 2 запроса
Разработчик сайтов
20 Aug, 2010
Вариант skie более оптимизирован и выполнится более быстрее, при наличии индексов в обоих таблицах.