執行連接多個表中資料的SELECT 語句時,可能會遇到重複的行,如下所示在提供的場景中:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
此查詢檢索飲料的5 行,其中照片是唯一唯一的場地。然而,名稱和價格重複,導致像“fanta”這樣的飲料出現重複行。
要消除這些重複,您需要利用分組和聚合功能。分組可讓您根據共同值組合行,而聚合函數使您能夠為每個群組提取特定值。
如果您希望每種飲料單獨一行,無論與之關聯的照片有多少,您都可以按Drinks_id 進行分組:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此查詢將return:
name | price | photo |
---|---|---|
fanta | 5 | ./images/fanta-1.jpg |
dew | 4 | ./images/dew-1.jpg |
如果您希望每種飲料都有一組照片,MySQL 提供了GROUP_CONCAT 函數,該函數可以連接同一組中的值:
SELECT name, price, GROUP_CONCAT(photo, ',') FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id
此查詢將yield:
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 |
請注意,應謹慎使用GROUP_CONCAT,因為如果連接的值包含逗號,它可能會導致資料庫效能問題或傳回過大的字串。
以上是在 SQL SELECT 語句中連接多個表格時如何避免重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!