Как исключить строки, которые не соединяются с другой таблицей? - программирование
Подтвердить что ты не робот

Как исключить строки, которые не соединяются с другой таблицей?

У меня есть две таблицы, у одного есть первичный ключ, другой - как внешний ключ.

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

4b9b3361

Ответ 2

SELECT
   *
FROM
   primarytable P
WHERE
   NOT EXISTS (SELECT * FROM secondarytable S
     WHERE
         P.PKCol = S.FKCol)

Как правило, (NOT) EXISTS - лучший выбор, тогда (NOT) IN или (LEFT) JOIN

Ответ 3

используйте "не существует" левое соединение:

SELECT p.*
FROM primary_table p LEFT JOIN second s ON p.ID = s.ID
WHERE s.ID IS NULL

Ответ 4

SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL

Ответ 5

Если вы хотите выбрать столбцы из первой таблицы ", которые также присутствуют во второй таблице, тогда в этом случае вы также можете использовать EXCEPT. В этом случае имена столбцов могут быть разными, но тип данных должен быть то же самое.

Пример:

select ID, FName
from FirstTable
EXCEPT
select ID, SName
from SecondTable

Ответ 6

Другое решение:

SELECT * FROM TABLE1 WHERE id NOT IN (SELECT id FROM TABLE2)

Ответ 7

Это было полезно использовать в COGNOS, потому что создание SQL-запроса "Не в" в Cognos было разрешено, но потребовалось слишком много времени для запуска. У меня была закодированная вручную таблица A для присоединения к таблице B в Cognos, поскольку A.key "не в" B.key, но запрос длился слишком долго или не возвращал результаты через 5 минут.

Для всех, кто ищет решение "НЕ В IN" в Cognos, вот что я сделал. Создайте запрос, который соединяет таблицы A и B с LEFT JOIN в Cognos, выбирая тип ссылки: таблица A.Key имеет значения от 0 до N в таблице B, а затем добавляет фильтр (они соответствуют Where Clauses) для: таблицы B.Key - NULL.

Быстро и быстро, как шарм.

Ответ 8

У меня есть еще один звонок. Что если я хочу исключить строки, которые не объединяются с двумя другими таблицами