Как выбрать строки внешнего ключа, которых нет в родительской таблице в Postgres? - PullRequest
0 голосов
/ 08 января 2020

table2:

id (pk)
table1_id (fk)
other_columns

table1:

id (pk)
other_columns

Записи таблицы 1 были удалены, но ссылки на таблицу 2 остались и не были аннулированы. Как лучше всего запросить из Таблицы 2 список, выбирающий внешние ключи, которых нет в Таблице 1?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Если бы у вас были каскадные ограничения внешнего ключа, это не было бы проблемой. Но вы можете использовать not exists:

select t2.*
from table2 t2
where not exists (select 1
                  from table1 t1
                  where t1.pk = t2.fk
                 );
0 голосов
/ 08 января 2020

Вы можете использовать not exists:

select t2.*
from table2 t2
where not exists (select 1 from table1 t1 where t1.id = t2.table1_id)

Вы можете легко превратить это в выражение delete:

delete from table 2
where not exists (select 1 from mytable where t1.id = t2.table1_id)
...