Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengelakkan Baris Pendua Apabila Menyertai Berbilang Jadual dalam Penyata SQL SELECT?
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."
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.
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 |
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 |
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!