Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengehadkan Keputusan Sertaan kepada Rekod Tunggal setiap Baris daripada Jadual Bergabung?

Bagaimanakah Saya Boleh Mengehadkan Keputusan Sertaan kepada Rekod Tunggal setiap Baris daripada Jadual Bergabung?

Susan Sarandon
Susan Sarandonasal
2024-11-19 11:09:03477semak imbas

How Can I Limit Join Results to a Single Record per Row from the Joined Table?

HAD SERTAI: Mendapatkan semula Rekod Tunggal daripada Jadual Bercantum

Apabila menyertai dua jadual, anda mungkin perlu mengehadkan keputusan kepada satu rekod setiap baris daripada jadual bercantum. Ini boleh dicapai dalam MySQL menggunakan klausa LIMIT 1 pada subkueri yang dirujuk oleh klausa gabungan.

Pertimbangkan senario di mana kita ingin menyertai kategori dan jadual produk untuk mendapatkan maklumat kategori dan produk pertama yang dikaitkan dengan setiap kategori.

SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id

Pertanyaan ini akan mengembalikan semua rekod produk untuk setiap kategori, yang bukan output yang diingini. Untuk mengehadkan keputusan kepada produk pertama bagi setiap kategori, kami boleh mengubah suai pertanyaan seperti berikut:

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 = (
  SELECT p1.id FROM products AS p1
  WHERE c.id=p1.category_id
  ORDER BY p1.id LIMIT 1
 )

Dalam pertanyaan yang diubah suai ini, subkueri digunakan untuk mendapatkan id produk pertama bagi setiap kategori. Id ini kemudiannya digunakan dalam klausa gabungan untuk mengehadkan keputusan kepada rekod tunggal yang diingini.

Pendekatan ini amat cekap dalam senario dengan bilangan produk yang besar, kerana ia mengelakkan overhed prestasi mengagregatkan berbilang rekod produk bagi setiap kategori. Selain itu, ia boleh digunakan dalam kedua-dua MySQL dan PostgreSQL, menyediakan penyelesaian serba boleh untuk mendapatkan data.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengehadkan Keputusan Sertaan kepada Rekod Tunggal setiap Baris daripada Jadual Bergabung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn