web-dev-qa-db-ja.com

SQLSTATE [42000]:構文エラーまたはアクセス違反:1055 SELECTリストの式#3がGROUP BY句になく、非集約が含まれています

ubuntuを15.10から16.04にアップグレードしたとき、yii2プロジェクトにこのエラーがあります

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3
of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'iicityYii.opportunity_conditions.money' which is not functionally dependent 
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

実行されたSQLは次のとおりです。

SELECT SUM(oc.money),op.id,oc.money,
            op.mantaghe,
            op.`time`, op.`id`, `op`.`logo`,
           `pd`.`user_id`, `op`.`name`, 
           `pd`.`co_name`, `op`.`address`, 
           `op`.`project_type_id`, `op`.`state_id`
FROM `opportunity` op 
INNER JOIN `profile_details` pd  ON op.user_id=pd.user_id  
INNER JOIN `opportunity_conditions` oc ON   op.id=oc.opportunity_id
GROUP BY `op`.`id`
ORDER BY `op`.`id` DESC

私の問題を解決するには?

26
Saltern

あなたの選択では、集計関数の合計と列名のセットがあり、エラーはgroup by句で列名の正しいリストを指定していないことを示しています。おそらく_profile_details, opportunity_conditions_テーブルに関連して、グループに列名を追加する必要があります

また、,(opportunity.id),(opportunity_conditions.money), (opportunity.mantaghe),がある理由_()_合計が必要な場合は、すべての列に合計を追加する必要があります

_sum(opportunity.id), sum(opportunity_conditions.money),
_

sum(opportunity.mantaghe)、

それ以外の場合、thesが通常の列である場合、()なしで通常のsintaxを使用する必要があります

_opportunity.id, opportunity_conditions.money,opportunity.mantaghe,_

可能なクエリを書き直そうとしました

_ SELECT SUM(opportunity_conditions.money),
        `opportunity`.`id`,
        `opportunity_conditions.money`,
        `opportunity.mantaghe`, 
        `opportunity`.`time`, 
        `opportunity`.`logo`, 
        `profile_details`.`user_id`,
        `opportunity`.`name`, 
        `profile_details`.`co_name`,
        `opportunity`.`address`, 
        `opportunity`.`project_type_id`,
        `opportunity`.`state_id` 
FROM `opportunity` 
INNER JOIN `profile_details` ON `opportunity`.`user_id`= `profile_details`.`user_id` 7
INNER JOIN `opportunity_conditions` ON `opportunity`.`id`=`opportunity_conditions`.`opportunity_id` 
GROUP BY`opportunity`.`id`,   `profile_details`.`user_id`,`opportunity_conditions.money`,  
ORDER BY `opportunity`.`id` DESC
_

必須の列名のグループ別(希望)

_GROUP BY`opportunity`.`id`,   `profile_details`.`user_id`,`opportunity_conditions.money`,  
_
8
scaisEdge

以下を実行します。

Sudo mysql -u root -p

MySQLサーバーインスタンスのSQLモードを変更します。

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

別の方法は、MySQL構成を使用することです。 /etc/mysql/my.cnfに移動します。

  • [mysqld]のセクションを追加し、そのすぐ下にステートメントsql_mode = ""を追加します
  • mysqlサービスを再起動します。

    Sudo systemctl restart mysql
    
64
chitwarnold

laravelでMySqlを使用するとconfig/database.phpファイルに移動し、配列MySqlモードでstrictをfalseに変更します。

'connections' => [
    'mysql' => [
        'driver' => 'mysql',
        'Host' => env('DB_Host', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false, //from true
        'engine' => null,
    ],
],
15

この行をコピーして実行してください。それは私のために働いた。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

これを修正するYouTubeビデオ

7
Humphrey

解決策は、MySQL構成ファイルを編集することです。再起動するたびに構成が元に戻るためです...

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

そして追加

[mysqld]
sql-mode=""

その後、再起動します

Sudo systemctl restart mysql

Ubuntu 18.04で動作します。

6
resizemyimg.com

Thx、これは私を助けましたが、これはそれを設定しません[〜#〜] permanently [〜#〜]で、再起動するたびに元に戻ります。

したがって、設定ファイル([mysqld]セクションの/etc/mysql/my.cnfなど)でこれを設定して、MySQLの再起動後も変更が有効になるようにする必要があります。

構成ファイル:/etc/mysql/my.cnf

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
0
alex