MySQL - Как получить список значений в таблице A, которых нет в таблице B?

**Table A**
1
2
3
4
5
6


**Table B**
2
3
5

Как выбрать для идентификаторов записей, которые существуют только в таблице B? В этом примере я ищу запрос, который возвращает 1, 4 и 6.

 Eileen03 июл. 2009 г., 16:34
Извините, да, это идентификаторы. Первоначально я предоставил больше информации, но потом подумал, что буду сводить только к соответствующим битам. Видимо, я слишком далеко.
 Jonathan Fingland03 июл. 2009 г., 16:28
каковы эти значения? Идентификаторы? предоставление структуры таблицы на самом деле сделает это проще для нас

Ответы на вопрос(3)

Это позволяет избежатьIN + подзапрос:

SELECT A.value FROM A
LEFT OUTER JOIN B ON (A.value = B.value)
WHERE B.value IS NULL

Так какIN (subquery) isn't optimized как это выполняется для каждой найденной строки в таблице A

 04 июл. 2009 г., 21:11
Да, но вопрос для mysql, в документе сказано, что этот запрос (все еще в 6.0 очевидно) испорчен оптимизатором.
 03 июл. 2009 г., 16:42
Это зависит от оптимизатора запросов. Например, Sql Server будет выполнять оба запроса одинаково.

Пытаться

select value from B where value not in (select value from A)

чтобы получить значения в B, которых нет в A.

Чтобы получить обратное (значения в A не в B) используйте

select value from A where value not in (select value from B)
 03 июл. 2009 г., 16:28
Мне было бы очень любопытно посмотреть, как это работает по сравнению с предоставленным ответом. Моей первоначальной мыслью было ответить тем, что он написал, но будет ли это быстрее? Ммм.
 03 июл. 2009 г., 16:40
Если таблица B может содержать значения NULL, NOT IN - опасный инструмент, см.stackoverflow.com/questions/129077/…  Рассмотрите возможность использования НЕ СУЩЕСТВУЕТ.
Решение Вопроса

Предполагая, что столбец имеет имя «id», либо:

SELECT *
FROM tableA a
WHERE NOT EXISTS (SELECT 1 FROM tableB WHERE id = a.id)

или же

SELECT *
FROM TableA
WHERE id NOT IN (SELECT id FROM tableB)

Возможно, вам нужно будет проверить, какие из них работают лучше всего. MySQL может быть немного непредсказуемым.

 Eileen03 июл. 2009 г., 16:33
Ах, это прекрасно! Спасибо! Производительность здесь не является проблемой, так как это разовый запрос.

Ваш ответ на вопрос