MySQL: 複数の列を選択するための DISTINCT について
MySQL テーブルで重複する行を扱う場合、DISTINCT キーワードを使用して一意の列を取得できます。ただし、複数の列を選択するときに制限が生じる可能性もあります。この記事では、DISTINCT の使用中にすべてのフィールドを取得する問題と、重複行の最新のエントリを選択する解決策について説明します。
複数の列に対する DISTINCT の制限
DISTINCT は、特定の列にのみ適用される関数ではありません。代わりに、これは選択リスト内のすべての列に影響を与えるクエリ修飾子です。 すべて 列の値が同一である重複行を削除します。
DISTINCT の正しい構文
DISTINCT は、SELECT の直後に指定する必要があります (他のクエリ修飾子 (SQL_CALC_FOUND_ROWS など)。クエリ修飾子の後に、列名がリストされます。
例:
<code class="sql">SELECT DISTINCT foo, ticket_id FROM table...</code>
このクエリは、ticket_id と foo の値の個別のペアごとに行を出力します。
すべての列を選択するための解決策
重複を削除するにはすべての列が同一である必要があるため、すべてのフィールドを選択しても DISTINCT を使用することはできません。ただし、重複行の最新エントリを選択するために使用できる回避策があります。
<code class="sql">SELECT t1.* FROM table AS t1 JOIN ( SELECT ticket_id, MAX(row_id) AS max_id FROM table GROUP BY ticket_id ) AS t2 ON t1.ticket_id = t2.ticket_id AND t1.row_id = t2.max_id</code>
このクエリは、サブクエリを使用して各 ticket_id の最大 row_id を検索し、メイン テーブルをサブクエリと結合します。各 ticket_id の最新の行を選択します。
以上がMySQL で DISTINCT を使用してすべての列を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。