sql >> データベース >  >> RDS >> Mysql

MySQLselectdistinctが機能しない

    ORDER BY id DESCのため 句では、クエリは書かれたかのように扱われます:

    SELECT DISTINCT name, id
      FROM table
     ORDER BY id DESC;
    

    idを除いて 列はユーザ​​ー(あなた)に返されません。結果セットには、idが含まれている必要があります それで注文できるように。明らかに、この結果セットには4つの行があるため、これが返されます。 (モラル:非表示の列で並べ替えないでください。クエリに対して何が行われるかがわからない場合を除きます。)

    試してみてください:

    SELECT DISTINCT name
      FROM table
     ORDER BY name;
    

    (気まぐれによるDESCの有無にかかわらず)。 2行だけが返されます。

    idを知る必要がある場合 名前ごとに、次のことを考慮してください。

    SELECT name, MIN(id)
      FROM table
     GROUP BY name
     ORDER BY MIN(id) DESC;
    

    MAXを使用して同様に効果を上げることができます。

    これはすべて、MySQLを含むすべてのSQLデータベースに適用されます。 MySQLには、多少非決定論的な結果をもたらすGROUPBY句を省略できるいくつかのルールがあります。この機能を利用しないことをお勧めします。

    長い間(おそらく今でも)、SQL標準では、このような混乱を避けるために、選択リストにない列で並べ替えることはできませんでした。結果セットに順序付けデータが含まれていない場合、結果セットの順序付けは「必須順序付け」と呼ばれます。順序付け列がすべて結果セットに表示される場合、データを自分で順序付けるのに十分なデータがあるため、「不必要な順序付け」です。




    1. Oracle-読み取り専用ユーザーを作成する方法

    2. Ubuntu 17:mysqlclientをインストールできません

    3. JDBC:単一のデータベース呼び出しを介して複数の結果セットを返す-Oracleでは機能しない

    4. Oracle-dbms_utility.exec_ddl_statementを使用するカーソルが正しく実行されていません