14

こんにちは、おそらく誰かが以下のエラーに光を当てることができるかどうか疑問に思います。SQLはローカルで正常に動作しますが、リモートで以下のエラーが発生します。

SQLクエリ:

   SELECT COUNT(node.nid), 
          node.nid AS nid, 
          node_data_field_update_date.field_update_date_value AS node_data_field_update_date_field_update_date_value
     FROM node node
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid
    WHERE node.type IN ('update')
ORDER BY node_data_field_update_date_field_update_date_value DESC

MySQLは言った:

#1140-GROUP BY句がない場合、GROUP列(MIN()、MAX()、COUNT()、...)とGROUP列の混合は不正です`

4

7 に答える 7

14

サーバーでONLY_FULL_GROUP_BYがオンになっている可能性があります。オフにするか、選択した各フィールドをグループ化に追加できます。

于 2009-12-06T03:27:54.627 に答える
11

集計関数を使用する単一の列が機能するのに、集計関数を使用しない列を含むバージョンが機能しない理由は、GROUP BY句を指定する必要があるためです。クエリは次のようになります。

   SELECT COUNT(n.nid), 
          n.nid, 
          ctu.field_update_date_value
     FROM NODE n
LEFT JOIN CONTENT_TYPE_UPDATE ctu ON ctu.vid = n.vid
    WHERE n.type IN ('update')
 GROUP BY n.nid, ctu.field_update_date_value
 ORDER BY field_update_date_value DESC

テーブルのエイリアスを短いものに変更しました-読みやすくなりました。問題の要点は次のとおりです。

   SELECT n.nid,
          COUNT(n.fake_example_column),                
          ctu.field_update_date_value
      ...
 GROUP BY n.nid, ctu.field_update_date_value

GROUP BY をどのように定義する必要があるかを強調するために、偽の列を使用するように例を変更しました。集計関数でラップせずに参照する列は、に記載する必要GROUP BYがあります。MySQL は、列を選択的に省略できる場所をサポートしていることがわかっている唯一のデータベースであるため、MySQL でクエリ機能するのに、他のデータベースに変更せずに移植できない理由について多くの質問があります。どうやらあなたの場合、少なくとも1つ定義する必要があります。 GROUP BY

于 2009-12-06T04:23:55.440 に答える
7

Laravel Framework では'strict' => false、config フォルダー内のデータベース ファイルで を設定すると、これが修正されます。

于 2017-12-06T12:48:58.720 に答える
3

sum()、min()、max() のような SQL で集計関数を使用する場合は、group by を使用する必要があります。

しかし、最新のSQLでは、selectのすべての列をグループByとしても使用する必要があります。

このために、config->databaseで使用するlaravelプロジェクトで

'厳密' => false,

php artisan config:cache を実行して設定キャッシュをクリアします。

私はそれがあなたにとってより役立つと思います。

于 2018-07-27T12:17:09.970 に答える
0

基本に戻します:

   SELECT COUNT( node.nid ) 
     FROM node node
LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid
    WHERE node.type IN ('update')
 ORDER BY node_data_field_update_date.field_update_date_value DESC
于 2009-08-07T13:17:03.160 に答える
0

MySQL 5.0 の古いバージョンでも同じ問題があります。新しい5.5バージョンでは動作します!

SELECT COUNT(*), id
FROM `cities` AS `c`
于 2015-10-10T06:46:31.430 に答える