Использование предложения EXCEPT в PostgreSQL

Я пытаюсь использовать EXCEPT пункт для извлечения данных из таблицы. Я хочу получить все строки из table1 кроме тех, которые существуют в table2, Насколько я понимаю, следующее не будет работать:

CREATE TABLE table1(pk_id int, fk_id_tbl2 int);
CREATE TABLE table2(pk_id int);

Select fk_id_tbl2
FROM table1
Except
Select pk_id
FROM table2

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

Может кто-нибудь объяснить, как лучше использовать пункт объяснения?

1 ответ

Решение

Ваш запрос кажется вполне корректным:

SELECT fk_id_tbl2 AS some_name
FROM   table1
EXCEPT  -- you may want to use EXCEPT ALL
SELECT pk_id
FROM   table2;

Имена столбцов не имеют отношения к запросу. Только типы данных должны совпадать. Имя выходного столбца вашего запроса fk_id_tbl2 только потому, что это имя столбца в первом SELECT, Вы можете использовать любой псевдоним.

Что часто упускают из виду: тонкие различия между EXCEPT (который складывает дубликаты) и EXCEPT ALL - который сохраняет все отдельные несопоставленные строки. Дополнительные пояснения и другие способы сделать то же самое, некоторые из них гораздо более гибкие:

Детали для EXCEPT в руководстве.

Другие вопросы по тегам