2016-11-17 15 views
3

MySql 5.7の動作を理解しようとしています。SQLSTATE [42000]:構文エラーまたはアクセス違反:1055式#2

 SELECT 
     r.*, 
     CONCAT(u.fname, ' ', u.lname) AS name 
     FROM 
     `events` AS r 
     LEFT JOIN `users` AS u 
      ON r.user_id = u.id 
     WHERE r.event_id = 1 
     GROUP BY r.user_id 
     ORDER BY r.date ; 

怒鳴るのクエリでは、私は、「リストを選択し、エラーを取得していますGROUP BY句ではなく、GROUP BY句の列に機能的に依存しない非集約列 『r.id』が含まれ、これはと互換性がありませんsql_modeの= ONLY_FULL_GROUP_BY [コード:42000]:STRICT_ALL_TABLES "このような

しかし、クエリが正常に動作し、私は、ローカルホスト上で働いているので

SELECT 
     r.id, 
     r.event_id, 
     r.user_id, 
     r.date 
     CONCAT(u.fname, ' ', u.lname) AS name 
     FROM 
     `events` AS r 
     LEFT JOIN `users` AS u 
      ON r.user_id = u.id 
     WHERE r.event_id = 1 
     GROUP BY r.user_id, r.event_id, r.id, r.date 
     ORDER BY r.date ; 

、私はmy.iniファイルと設定のsql_modeへの変更を加えることができます" 、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER "

ライブになると、これは問題になります。多くの人には、特に共有ホスティングではmy.iniファイルにアクセスできないためです。

これは私にとっては少し違っていると思われます。すべての単一フィールドを宣言し、それに応じて集計します。

MySqlでの私の知識は初心者なので、上記の質問を書く良い方法がありますか? 1つのテーブルから10または20のフィールドを取得する必要がある場合、それらのすべてを集約すると、少しばかげているようです。

答えて

1

概念があるが、あなたが集約機能に関与していないすべての列によってグループに

あなた

SELECT 
    r.id, 
    r.event_id, 
    r.user_id, 
    r.date 
    CONCAT(u.fname, ' ', u.lname) AS name 
    FROM 
    `events` AS r 
    LEFT JOIN `users` AS u 
     ON r.user_id = u.id 
    WHERE r.event_id = 1 
    GROUP BY r.user_id, r.event_id, r.id, r.date 
    ORDER BY r.date ; 

は、最初のあなたが持っているで

SELECT DISTINCT 
    r.id, 
    r.event_id, 
    r.user_id, 
    r.date 
    CONCAT(u.fname, ' ', u.lname) AS name 
    FROM 
    `events` AS r 
    LEFT JOIN `users` AS u 
     ON r.user_id = u.id 
    WHERE r.event_id = 1 
    ORDER BY r.date ; 

に相当します宣言する必要があります簡単ですr。*ただしグループ内にはありません

+0

OPへの注記:select句の集約関数'count()'、 'sum()'などと同じです。ここでは、グループ化のすべての値を評価しています。 – Ray

+0

正しいconcatは集計関数ではありませんlinearです。group_concatは集計関数です – scaisEdge

+0

DuH !!良いキャッチ、私のコメントを編集 – Ray

関連する問題