Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelakkan Baris Pendua Apabila Menyertai Berbilang Jadual dalam Penyata SQL SELECT?

Bagaimanakah Saya Boleh Mengelakkan Baris Pendua Apabila Menyertai Berbilang Jadual dalam Penyata SQL SELECT?

DDD
DDDasal
2024-12-05 21:19:14903semak imbas

How Can I Avoid Duplicate Rows When Joining Multiple Tables in SQL SELECT Statements?

Mengelakkan Keputusan Pendua dalam Pernyataan SELECT Berbilang Jadual: Panduan Komprehensif

Apabila melakukan pernyataan SELECT yang menggabungkan data daripada berbilang jadual, anda mungkin menghadapi baris pendua, seperti yang ditunjukkan dalam senario yang disediakan:

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id

Pertanyaan ini mendapatkan 5 baris untuk minuman, dengan foto sebagai satu-satunya medan unik. Walau bagaimanapun, nama dan harga diulang, membawa kepada baris pendua untuk minuman seperti "fanta."

Penyelesaian: Fungsi Pengumpulan dan Agregat

Untuk menghapuskan pendua ini, anda perlu menggunakan pengumpulan dan agregat fungsi. Pengumpulan membolehkan anda menggabungkan baris berdasarkan nilai sepunya, manakala fungsi agregat membolehkan anda mengekstrak nilai khusus untuk setiap kumpulan.

Pengumpulan mengikut Minuman

Jika anda mahukan satu baris untuk setiap minuman, tanpa mengira bilangan foto yang dikaitkan dengannya, anda boleh mengumpulkan mengikut drinks_id:

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id

Pertanyaan ini akan return:

name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg

Menggabungkan Foto dengan GROUP_CONCAT

Jika anda lebih suka mempunyai susunan foto untuk setiap minuman, MySQL menyediakan fungsi GROUP_CONCAT, yang menggabungkan nilai daripada kumpulan yang sama:

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id

Pertanyaan ini akan hasil:

name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg

Pertimbangan

Perhatikan bahawa GROUP_CONCAT harus digunakan dengan berhati-hati, kerana ia boleh membawa kepada isu prestasi pangkalan data atau mengembalikan rentetan yang terlalu besar jika nilai yang digabungkan mengandungi koma.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Baris Pendua Apabila Menyertai Berbilang Jadual dalam Penyata SQL SELECT?. 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