Ini adalah solusi yang sah untuk beberapa desain.
Katakanlah Anda memiliki hierarki hubungan satu-ke-banyak seperti Customer
- Order
- Basket
- Item
- Price
, dll., yang tidak dapat diisi pada level apa pun:Customer
mungkin tidak memiliki Orders
, sebuah Orders
tidak boleh memiliki Basket
, dll.
Dalam hal ini Anda mengeluarkan sesuatu seperti:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Perhatikan bahwa dalam beberapa kasus mungkin tidak efisien, dan dapat diganti dengan EXISTS
atau NOT EXISTS
(jika Anda hanya ingin mengetahui bahwa catatan yang sesuai ada atau tidak ada di tabel lain).
Lihat artikel ini di blog saya untuk detail kinerja:
- Menemukan pesanan yang belum selesai
- bagaimana memanfaatkan penggantian
LEFT JOIN
denganNOT EXISTS