Masalah:
Untuk menyertai dua jadual sambil mengambil hanya satu rekod daripada jadual bercantum untuk setiap rekod dalam jadual utama, khususnya dalam konteks di mana berbilang rekod wujud dalam gabungan jadual.
PENYELESAIAN MENGGUNAKAN SUBQUERY:
Pendekatan ini secara berkesan memintas ralat yang timbul apabila memilih berbilang lajur daripada jadual yang dicantumkan sambil mengehadkan hasil kepada satu rekod. Kuncinya ialah menggunakan subkueri untuk mendapatkan kunci utama rekod yang dikehendaki. Subkueri kemudiannya digunakan untuk menapis jadual yang dicantumkan dalam pertanyaan utama.
SELECT c.id, c.title, p.id AS product_id, p.title AS product_title FROM categories AS c JOIN products AS p ON p.id = ( --- the PRIMARY KEY SELECT p1.id FROM products AS p1 WHERE c.id=p1.category_id ORDER BY p1.id LIMIT 1 )
Pertanyaan ini menunjukkan prestasi yang unggul, walaupun apabila jadual yang digabungkan mengandungi bilangan rekod yang jauh lebih besar daripada jadual utama.
Pendekatan Alternatif:
Walaupun pendekatan subkueri secara amnya optimum, terdapat alternatif kaedah yang ada. Walau bagaimanapun, adalah penting untuk mempertimbangkan potensi implikasi prestasi mereka.
SELECT id, category_title, (array_agg(product_title))[1] FROM (SELECT c.id, c.title AS category_title, p.id AS product_id, p.title AS product_title FROM categories AS c JOIN products AS p ON c.id = p.category_id ORDER BY c.id ASC) AS a GROUP BY id, category_title;
SELECT c.id, c.title, p.id AS product_id, p.title AS product_title FROM categories AS c CROSS JOIN (SELECT product_id, title, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id) AS rn FROM products) AS p WHERE rn = 1;
Atas ialah kandungan terperinci Bagaimana untuk Menyertai Jadual dengan Cekap dengan LIMIT 1 pada Jadual Bercantum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!