Mysql 最佳化:了解「SELECT DISTINCT」限制
在MYSQL 中,「SELECT DISTINCT」子句用於根據下列條件消除重複行指定的列值。但是,它在嘗試選擇多個欄位時可能會遇到某些限制。
問題:
使用「SELECT DISTINCT」後跟逗號分隔清單時欄位和另一個「DISTINCT」子句,如下例所示,會發生錯誤:
mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
解釋:
與適用於個體的函數不同columns,「DISTINCT」是影響選擇清單中所有欄位的查詢修飾符。只有當選擇中的所有列都具有相同值時,它才會刪除重複項。
因此,查詢嘗試輸出基於所有列的不同行,包括在逗號分隔清單和「ticket_id」中指定的行。這會產生歧義,因為不清楚哪些欄位應被考慮為唯一性。
解決方案:
要選擇所有欄位並根據「ticket_id」消除重複項,正確的語法是:
SELECT DISTINCT *, ticket_id FROM temp_tickets ORDER BY ticket_id
此查詢將根據所有列的組合值(包括“ticket_id”)刪除重複項。但是,它仍然只會顯示每個唯一“ticket_id”值的最新條目。若要只擷取所有欄位的最新條目,可以使用子查詢為每個不同的「ticket_id」值選擇最大的ticket_id,如下所示:
SELECT * FROM temp_tickets WHERE ticket_id IN (SELECT MAX(ticket_id) FROM temp_tickets GROUP BY ticket_id)
以上是為什麼 MySQL 中的多個欄位「SELECT DISTINCT」會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!