Я использую Postgres 10 со следующей структурой и данными:
create table table1(
id serial primary key
);
create table table2(
id serial primary key
);
create table table3(
id serial primary key,
table1_id int,
table2_id int
);
insert into table1 (id) values (1), (2), (3);
insert into table2 (id) values (1), (2);
insert into table3 (id, table1_id, table2_id) values (1, 1, 1), (2, 1, 2), (3, 2, 1);
Я хочу, чтобы все комбинации таблиц table1 и table2 не имели записи в таблице table3, по сути, такой результат:
+-----------+-----------+-----------+
| table1.id | table2.id | table3.id |
+-----------+-----------+-----------+
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 1 | null |
| 1 | 2 | 2 |
| 2 | 2 | null |
| 3 | 2 | null |
+-----------+-----------+-----------+
Обратите внимание, что в результатах есть все возможные комбинации из таблицы1 и таблицы2 с соответствующим идентификатором из таблицы3.
В конце концов, я бы хотел, чтобы запрос возвращал только те строки, в которых table3.id равен NULL:
+-----------+-----------+-----------+
| table1.id | table2.id | table3.id |
+-----------+-----------+-----------+
| 3 | 1 | null |
| 2 | 2 | null |
| 3 | 2 | null |
+-----------+-----------+-----------+
Я не уверен, как вообще подойти к этому запросу: присоединиться или Внутренний выбор или, может быть, даже исключает ?