Дозвольте трохи пояснити на своєму прикладі.
Завдання: правильна інформація, коли абітурієнти (учні, які збираються залишити середню школу) подали заявки до університету раніше, ніж вони отримали шкільні сертифікати (так, вони отримали сертифікати раніше, ніж їх видали (за датою сертифікату). збільшити дату подання заявки на дату видачі сертифіката.
Таким чином. наступне твердження, схоже на MySQL:
UPDATE applications a
JOIN (
SELECT ap.id, ab.certificate_issued_at
FROM abiturients ab
JOIN applications ap
ON ab.id = ap.abiturient_id
WHERE ap.documents_taken_at::date < ab.certificate_issued_at
) b
ON a.id = b.id
SET a.documents_taken_at = b.certificate_issued_at;
Стає подібним до PostgreSQL
UPDATE applications a
SET documents_taken_at = b.certificate_issued_at -- we can reference joined table here
FROM abiturients b -- joined table
WHERE
a.abiturient_id = b.id AND -- JOIN ON clause
a.documents_taken_at::date < b.certificate_issued_at -- Subquery WHERE
Як ви можете бачити, оригінальний підзапит JOIN
«s ON
положення стало одним з WHERE
умов, яке conjucted шляхом AND
з іншими, які були переміщені з підзапиту без будь - яких змін. І більше немає потреби в JOIN
таблиці з самим собою (як це було в підзапиті).