Deixe-me explicar um pouco mais pelo meu exemplo.
Tarefa: informações corretas, onde os alunos (alunos prestes a abandonar o ensino médio) enviaram solicitações para a universidade mais cedo do que obtiveram certificados escolares (sim, obtiveram certificados mais cedo do que foram emitidos (por data especificada). aumente a data de envio do aplicativo para se adequar à data de emissão do certificado.
Portanto. próxima instrução semelhante ao 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;
Torna-se semelhante ao PostgreSQL de tal maneira
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
Como você pode ver, JOIN
a ON
cláusula da subconsulta original se tornou uma das WHERE
condições, combinadas AND
com outras, que foram movidas da subconsulta sem alterações. E não há mais necessidade de JOIN
tabela com ela mesma (como era na subconsulta).