在MySQL 中對多個表進行SELECT DISTINCT
在MySQL 查詢中,您在Drinks 和Drinks_s 表之間使用隱式photos 表之間使用隱式photo聯接,而無需WHERE 子句中的任何條件。這會產生笛卡爾積,產生 5 行,其中包含重複的名稱和價格值。若要消除這些重複項,您可以使用 SELECT DISTINCT 子句。
但是,如果您想要保留每種飲料的所有照片,則不能簡單地使用 SELECT DISTINCT,因為它只會傳回不同的行。相反,您需要使用分組和聚合函數的組合。
分組和聚合函數
分組依照指定的資料列聚合行。在本例中,您希望按 Drinks_id 對結果進行分組,以獲得每種飲料一行。然後,您可以使用聚合函數為每個分組結果選擇所需的值。
例如,要檢索每種飲料的第一張照片,您可以使用:
SELECT name, price, MIN(photo) AS photo FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
MIN ()聚合函數傳回每個照片列的最小值
GROUP_CONCAT
或者,如果您想將每種飲料的所有照片連接到字串中,您可以使用GROUP_CONCAT() 函數:
SELECT name, price, GROUP_CONCAT(photo, ',') AS photos FROM drinks JOIN drinks_photos ON drinks.id = drinks_id GROUP BY drinks_id;
但請注意,GROUP_CONCAT() 不是標準SQL聚合不同資料庫的函數及其使用可能有所不同。
以上是在 MySQL 中對多個資料表使用 SELECT DISTINCT 時如何處理重複行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!