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

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


**Table B**
2
3
5

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

Извините, да, это идентификаторы. Первоначально я предоставил больше информации, но потом подумал, что буду сводить только к соответствующим битам. Видимо, я слишком далеко. Eileen
каковы эти значения? Идентификаторы? предоставление структуры таблицы на самом деле сделает это проще для нас Jonathan Fingland

Ваш Ответ

3   ответа
0

Это позволяет избежать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

Да, но вопрос для mysql, в документе сказано, что этот запрос (все еще в 6.0 очевидно) испорчен оптимизатором.
Это зависит от оптимизатора запросов. Например, Sql Server будет выполнять оба запроса одинаково.
2

Пытаться

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)
Мне было бы очень любопытно посмотреть, как это работает по сравнению с предоставленным ответом. Моей первоначальной мыслью было ответить тем, что он написал, но будет ли это быстрее? Ммм.
Если таблица B может содержать значения NULL, NOT IN - опасный инструмент, см.stackoverflow.com/questions/129077/…  Рассмотрите возможность использования НЕ СУЩЕСТВУЕТ.
2

Предполагая, что столбец имеет имя «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 может быть немного непредсказуемым.

Ах, это прекрасно! Спасибо! Производительность здесь не является проблемой, так как это разовый запрос. Eileen

Похожие вопросы