Laissez-moi vous expliquer un peu plus par mon exemple.
Tâche: corriger info, où abiturients ont soumis des demandes à l'université plus tôt, qu'ils ont obtenu des certificats de scolarité (oui, ils ont obtenu les certificats antérieurs, qu'ils ont été émis (par certificat date indiquée). Donc, nous allons augmenter la demande date de soumettre à l'ajustement du certificat à la date d'émission.
Ainsi. prochaine MySQL-comme la déclaration:
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;
Devient PostgreSQL-comme dans la manière
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
Comme vous pouvez le voir, originale sous-requête JOIN
s' ON
clause est devenue l'une des WHERE
conditions, ce qui est conjucted en AND
avec d'autres, qui ont été déplacés à partir de la sous-requête sans aucune modification. Et il n'y a pas besoin de plus de JOIN
table avec elle-même (comme il l'a été dans la sous-requête).