Lassen Sie mich anhand meines Beispiels etwas mehr erklären.
Aufgabe: Richtige Informationen, bei denen Abiturienten (Schüler, die kurz vor dem Verlassen der Sekundarschule stehen) Anträge früher an der Universität eingereicht haben, als sie Schulzeugnisse erhalten haben (ja, sie haben Zertifikate früher erhalten, als sie ausgestellt wurden (bis zum angegebenen Zertifikatdatum). Also werden wir Erhöhen Sie das Einreichungsdatum des Antrags, um es an das Ausstellungsdatum des Zertifikats anzupassen.
Somit. nächste MySQL-ähnliche Anweisung:
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;
Wird so zu PostgreSQL-ähnlich
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
Wie Sie sehen können, ist JOIN
die ON
Klausel der ursprünglichen Unterabfrage zu einer der WHERE
Bedingungen geworden, die AND
mit anderen verbunden sind, die ohne Änderungen aus der Unterabfrage verschoben wurden. Und es besteht keine Notwendigkeit mehr, JOIN
mit sich selbst zu tischen (wie es bei Unterabfragen der Fall war).