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
Lepaskan: 2024-12-05 21:19:14
asal
905 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan