2017-01-04 6 views
5

(ORDER BY句の式の第1位は、SELECTリストに表示されていない)のMysql 5.7との非互換性

エラーコード:ORDER BY句の3065式#1がありますSELECT リストにはありません。参照列 'webstore.level_depth'は にありません。SELECT list;これが起こって、なぜこれが私のクエリ

 SELECT DISTINCT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite 
      FROM `pj_category_shop` cs, `pj_category` c 
      INNER JOIN `pj_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = 2) 
      WHERE (c.`active` = 1 OR c.`id_category` = 2) 
      AND cs.`id_category` = c.`id_category` AND cs.`id_shop` = 2 
      AND c.`id_category` != 1 
      AND `level_depth` <= 2 
      AND c.id_category IN (SELECT id_category FROM `pj_category_group` WHERE `id_group` IN (3)) 
      ORDER BY `level_depth` ASC, cl.`name` ASC; 

DISTINCTと互換性がありません私は理解していません...?

答えて

9

'ONLY_FULL_GROUP_BY'はSQLモードです。要素内でorderbyを実行することはできませんそれは選択list.weではありませんが、次のクエリに

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 
+1

実際には、そのうちの1つだけを実行する必要があります。 GLOBAL変数はサーバーの全体的な操作に影響し、SESSION変数は個々のクライアント接続の操作に影響します。 (https://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html)。 – Andres

+0

MySQL 5の値を使用する。6、最後のオプションを除いて、すべてをドロップしてください: 'set global SQL_MODE =" NO_ENGINE_SUBSTITUTION ";' –

0

ORDER BY列は、列は

はあなたの選択リストにc.level_depthを追加SELECTリストに表示されなければならない

試してみてください。私は、MySQL 5.7が含まれている私のquestion.Actuallyのための答えを見つける必要があり

SELECT DISTINCT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite, c.level_depth 
    FROM `pj_category_shop` cs, `pj_category` c 
    INNER JOIN `pj_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = 2) 
    WHERE (c.`active` = 1 OR c.`id_category` = 2) 
    AND cs.`id_category` = c.`id_category` AND cs.`id_shop` = 2 
    AND c.`id_category` != 1 
    AND `level_depth` <= 2 
    AND c.id_category IN (SELECT id_category FROM `pj_category_group` WHERE `id_group` IN (3)) 
    ORDER BY c.`level_depth` ASC, cl.`name` ASC; 
+0

クイックレスポンスのためのpradeepありがとうございます。私は私のクエリに変更を加えない条件があります。 –

0

SELECT DISTINCT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite FROM pj_category_shop cs, pj_category c INNER JOIN pj_category_langを実行することによって、私たちはこれを行ってでき

'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' 

からそれを変更する必要がありますcl ON (c. id_category = cl. id_category AND cl. id_ LANG要約する= 1 AND cl.id_shop = 2) WHERE (c.アクティブ= 1 OR c. id_category = 2) ORDER BY c. level_depth ASC, cl.ASC AND cs. id_category = c. id_category AND cs. id_shop = 2 AND c. id_category != 1 AND level_depth <= 2 AND c.id_category IN (SELECT id_category FROM pj_category_group WHERE id_group IN (3));

は、あなたが、その場合に、SELECTコマンドのコンテキスト内にORDER BYを持っている必要がありますWHERE、FROM、INNER JOINを使用します。 COLUMN_NAMEのASCによって 注文/ DESC追加していないのであれば

:名前は構文の下に記載された列に基づいて選択した列を注文するために使用されることを示唆しているようによる

1

SQL機能の順序は、列を使用して、select句でデータの順序集合を取り出すことにした場合、このエラーが発生します。

+0

Thanks Jayesh.But私のクエリはバージョン5.7以下のmysqlで動作します。 –

関連する問題