Нет, вам не нужно беспокоиться о порядке выбора.
Внешние ключи (в отличие от уникальных ограничений) оцениваются на оператор , а не на строку.И общее табличное выражение по-прежнему является одиночным оператором , даже если в нем несколько SELECT и DELETE.
Таким образом, если все ограничения по-прежнему действительны после завершения оператора, все в порядке.
Это легко увидеть с помощью следующего простого теста:
CREATE TABLE fk_test
(
id integer PRIMARY KEY,
parent_id integer,
FOREIGN KEY (parent_id) REFERENCES fk_test (id)
);
INSERT INTO fk_test (id, parent_id)
VALUES
(1, null),
(2, 1),
(3, 2),
(4, 1);
Таким образом, очевидно, что работает следующее, даже если идентификаторы указаны в «неправильном» порядке:
DELETE FROM fk_test
WHERE id IN (1,2,3,4);
Следующая также работает - показывает, что CTE все еще является одним оператором:
with c1 as (
delete from fk_test where id = 1
), c2 as (
delete from fk_test where id = 2
), c3 as (
delete from fk_test where id = 3
)
delete from fk_test where id = 4;