ホームページ >データベース >mysql チュートリアル >MySQL の複数のフィールドで「SELECT DISTINCT」が失敗するのはなぜですか?
Mysql の最適化: "SELECT DISTINCT" の制限について
MYSQL では、"SELECT DISTINCT" 句を使用して、以下に基づいて重複行を削除します。指定された列の値。ただし、複数のフィールドを選択しようとするときに発生する可能性のある特定の制限があります。
問題:
「SELECT DISTINCT」の後にカンマ区切りのリストを使用する場合次の例に示すように、フィールドの数と別の "DISTINCT" 句を指定すると、エラーが発生します:
mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
説明:
個々のフィールドに適用される関数とは異なります。列の場合、「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 中国語 Web サイトの他の関連記事を参照してください。