web-dev-qa-db-ja.com

mysql select distinct

私はmysqlテーブルの重複行を選択しようとしていますが、私にとってはうまく機能していますが、問題はそのクエリ内のすべてのフィールドを選択させないことです。より良いアンダースタディングのクエリ

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

1つ目は正常に動作しています

今、すべてのフィールドを選択しようとすると、エラーが発生します

私は最新の複製を選択しようとしていますが、ticket_id 127は行ID7、8、9で3回であるとしましょうticket_idの

どんなアイデアありがとう

33
Shanon

何方をお探しですか "SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id

[〜#〜] update [〜#〜]

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a  
INNER JOIN temp_tickets t ON (t.id = a.id)
42
a1ex07

DISTINCTは、一部の列にのみ適用される関数ではありません。これは、選択リスト内のすべての列に適用されるクエリ修飾子です。

つまり、DISTINCTは、all列が別の行の列と同一の場合にのみ行を削減します。

DISTINCTは、SELECTの直後に(SQL_CALC_FOUND_ROWSなどの他のクエリ修飾子と共に)続く必要があります。次に、クエリ修飾子に従って、列を一覧表示できます。

  • 右:SELECT DISTINCT foo, ticket_id FROM table...

    Ticket_idandfooの値の個別のペアごとに行を出力します。

  • 間違った:SELECT foo, DISTINCT ticket_id FROM table...

    Ticket_idに3つの異なる値がある場合、これは3行のみを返しますか? fooに6つの異なる値がある場合はどうなりますか? fooの6つの可能な値のうち、どの3つの値を出力する必要がありますか?
    書かれているようにあいまいです。

74
Bill Karwin

個別の代わりにgroup byを使用できます。 distinctを使用すると、テーブルからすべての値を選択するのに苦労するためです。 group byを使用する場合とは異なり、異なる値とテーブル内のすべてのフィールドを取得できます。

9
John

あなたはそのように使うことができます

mysql_query( "SELECT DISTINCT(ticket_id)、column1、column2、column3 FROM temp_tickets ORDER BY ticket_id")

2
Rahul Sharma

副選択を使用します。

http://forums.asp.net/t/1470093.aspx

0
Nicolas Modrzyk