Блог веб-разработчика: в помощь программистам

Поиск записей в таблице, которых нет в другой таблице

Может название немного непонятное, или запутанное, но суть такова, что у нас есть таблица 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);
  • Лучше переделать запрос на такой
    SELECT distinct id
    FROM tbl t1
    WHERE NOT EXISTS (SELECT 1
    FROM texts t2
    WHERE t1.id = t2.id
    );
    И в таблице test должен быть обязательно индекс по полю id.

  • Виноват, в MySQL вариант автора быстрее :(

  • а как насчет такого?

    SELECT DISTINCT tbl.id
    FROM tbl
    left join test on (tbl.id = test.id)
    WHERE test.id is null

  • skie правильно написал запрос, в вашем варианте выполняется 2 запроса

  • Вариант skie более оптимизирован и выполнится более быстрее, при наличии индексов в обоих таблицах.

You can follow any responses to this entry through the RSS 2.0 feed.