Biarkan saya menjelaskan sedikit lebih banyak dengan contoh saya.
Tugas: perbaiki info, di mana pelaku aborsi (siswa yang akan meninggalkan sekolah menengah) telah mengajukan aplikasi ke universitas lebih awal, daripada mereka mendapatkan sertifikat sekolah (ya, mereka mendapat sertifikat lebih awal, daripada yang dikeluarkan (berdasarkan tanggal sertifikat yang ditentukan). Jadi, kami akan tingkatkan tanggal pengiriman aplikasi agar sesuai dengan tanggal penerbitan sertifikat.
Jadi. pernyataan seperti-MySQL berikutnya:
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;
Menjadi seperti PostgreSQL sedemikian rupa
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
Seperti yang Anda lihat, subquery asli JOIN
's ON
klausul telah menjadi salah satu WHERE
kondisi, yang conjucted oleh AND
dengan orang lain, yang telah dipindahkan dari subquery dengan tidak ada perubahan. Dan tidak ada lagi kebutuhan untuk JOIN
meja dengan dirinya sendiri (seperti di subquery).