Использование предложения 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
в руководстве.