Postgresql - как получить записи в таблице, которые не совпадают в другой таблице

У меня есть вопрос, но я не знаю, как его задать! Пожалуйста, потерпите меня:

SELECT      sc.*, 
        scd.siteid, scd.desc_frontend
FROM        shipping_code sc
LEFT OUTER JOIN shipping_code_description scd
    ON          scd.shippingid=sc.shippingid
    AND         scd.siteid IN (SELECT siteid FROM site_international WHERE published='t')

Чтобы объяснить вышесказанное, у нас есть коды доставки (доставки) в одной таблице под названием «код_поставки», и, поскольку у нас многоязычный сайт, у нас есть другая таблица с описаниями языков для этих кодов, в «код_доставки». У нас также есть таблица с именем «site_international», которая имеет следующие поля: «siteid» (идентификатор сайта - например, для Великобритании, DE, FR .. (английский, немецкий, французский ..) и «опубликованный» (логическое поле, то есть является сайт живой или нет?)

Приведенный выше запрос SELECT получает все коды доставки с описаниями их языков только для этих опубликованных сайтов.

Теперь мы также хотим знать, какие коды доставки НЕ имеют описания на определенных сайтах. Если код доставки совершенно новый, то для этого кода будет возвращена 1 строка (из-за LEFT OUTER JOIN). 'Scd.siteid' и 'scd.desc_frontend' будут иметь значение NULL.

Тем не менее, если существует описание для сайта в Великобритании (на английском языке), но описания для FR и DE не существует, то вышеупомянутый запрос будет просто возвращать ОДНУ строку, а не ТРИ строки. Как я могу сказать, что описания DE и FR отсутствуют для определенного кода доставки?

Вот мои варианты:

1) я могкак-то сделать все это в рамках одного запроса. Должен быть способ (Я никогда раньше не использовал UNION, EXCEPT и т. Д., И я не уверен, что это то, что я должен использовать).

2) ИЛИ я мог бы просто сделать еще один запрос, чтобы ВЫБЕРИТЬ siteid ОТ site_international, ГДЕ опубликовано = 't'

и вышеизложенное дало бы мне все опубликованные сайты. Затем, используя PHP (который я использую для кодирования своего сайта), для каждого результата вышеупомянутого более крупного запроса я проверю и посмотрю, отсутствуют ли какие-либо описания. Например. Приведенный выше запрос siteid вернет 3 идентификатора (UK, DE, FR). Затем, если для определенного кода доставки будет возвращена только одна британская строка, я буду знать, что DE и FR отсутствуют, и я могу пометить это своему клиенту.

Посоветуйте, пожалуйста, существует ли лучший вариант "1"?

Большое спасибо!

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

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