SQLSTATE [ 42000 ]:구문 오류 또는 액세스 위반: SELECT 목록의 1055 식 #3이 GROUP BY 절에 없고 집계되지 않은 것을 포함합니다.
15.10에서 16.04로 업그레이드 된 우분투는 yii2 프로젝트에 이 erro가 있습니다.
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
내 문제를 어떻게 해결하나요?
실행:
sudo mysql -u root -p
mysql> SELECT @@global.sql_mode;
(선택사항으로 나중에 원래 설정으로 되돌리려면 출력을 노트에 복사하십시오.)
MySQL Server 인스턴스의 SQL 모드를 변경합니다.
mysql> SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
('돌아가다')와 같은 것을 할 수 mysql> SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
을 참조해 주십시오.)
보다 영속적인 방법(MySQL 재시작 후에도 유지됨)은 MySQL 구성을 사용하는 것입니다.★★★★★★★★★★★★★★★로 이동/etc/mysql/my.cnf
할 도 있습니다).sudo vim /etc/mysql/mysql.conf.d/mysql.cnf
「 」의을 추가합니다.
[mysqld]
에 '아까워서'라는 .sql_mode = ""
거 있잖아요sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
.MySQL 서비스를 다시 시작합니다.
sudo systemctl restart mysql
(오류)sudo service mysql restart
)
https://dba.stackexchange.com/a/113153/18098 도 참조해 주세요.
MySql에서 파일 구성/데이터베이스로 이동합니다.php는 어레이 MySql 모드에서 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,
],
],
이 라인을 복사해서 실행해 주세요.그것은 나에게 효과가 있었다.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
이 솔루션은 MySQL 구성 파일을 편집하는 것입니다.재시작할 때마다 구성이 복구되기 때문입니다.
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
추가하다
[mysqld]
sql-mode=""
재기동
sudo systemctl restart mysql
ubuntu 18.04로 동작합니다.
select에서 sum이라는 이름의 집계 함수와 일련의 열 이름이 있는 경우, 오류는 그룹별 절에서 올바른 열 이름 목록을 지정하지 않았음을 나타냅니다.아마도 에 의해 그룹에 더 많은 열 이름을 추가해야 할 수 있습니다.profile_details, opportunity_conditions
,도,,(opportunity.id),(opportunity_conditions.money), (opportunity.mantaghe),
??()
.
sum(opportunity.id), sum(opportunity_conditions.money),
sum(고정성.스파게티),
그렇지 않으면 이 컬럼이 일반 컬럼일 경우 () 없이 일반 구문을 사용해야 합니다.
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`,
단순히 following을 엄격하게 false로 설정합니다.
Config > database.php set 'strict' => false,
CentOS8에서는 webmin 설정 파일 /etc/my.cnf.d/mysql-server.cnf를 사용합니다.
[mysqld] sql-mode="
쿼리를 다음 주소로 업데이트하는 것이 좋습니다.
SELECT SUM(any_value(oc.money)),op.id,any_value(oc.money) as money,
op.mantaghe,
op.`time`, op.`id`, `op`.`logo`,
any_value(`pd`.`user_id`) as user_id, `op`.`name`,
any_value(`pd`.`co_name`) as 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
★★
에 '하다'가 포함되어 있는 group by
않은 에는 '컬럼'을 .any_value()
다른 테이블의 열을 호출하는 함수입니다.
개인적으로 sql_mode 글로벌 변수를 업데이트하지 않으려고 합니다.
자세한 것은, https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html 를 참조해 주세요.
한 층 한 덩어리로
SQLSTATE [ 42000 ]:구문 오류 또는 액세스 위반: SELECT 목록의 1055 식 #1이 GROUP BY 절에 없고 GROUP BY 절의 열에 함수적으로 종속되지 않는 비집약 열 'turn.barnamehs.id'을 포함합니다. 이는 sql_mode=only_full_group_by select * from *와 호환되지 않습니다.tables
여기서 date(날짜)end_date
) > = 2022-05-10 00:00:00 그룹화speciality_id
해결책: config/module에서 'false' = > false를 변경합니다.php
Thx, 이것은 도움이 되었습니다만, 이것에 의해 영구적으로 설정되는 것은 아니고, 재기동할 때마다 원래대로 돌아옵니다.
따라서 MySQL 재시작 후에도 변경 내용이 그대로 적용되도록 구성 파일(예: [mysql] 섹션의 /etc/mysql/my.cnf)에서 설정해야 합니다.
설정 파일: /etc/mysql/my.cnf
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
사용할 수 있습니다.ANY_VALUE
참조할 수 있습니다.따라서 다음과 같은 이점이 있습니다.
SELECT SUM(oc.money),
op.id,
ANY_VALUE(oc.money),
ANY_VALUE(op.mantaghe),
ANY_VALUE(op.`time`), op.`id`, ANY_VALUE(`op`.`logo`),
ANY_VALUE(`pd`.`user_id`), ANY_VALUE(`op`.`name`),
ANY_VALUE(`pd`.`co_name`), ANY_VALUE(`op`.`address`),
ANY_VALUE(`op`.`project_type_id`), ANY_VALUE(`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
자세한 것은 이쪽.
언급URL : https://stackoverflow.com/questions/36950857/sqlstate42000-syntax-error-or-access-violation-1055-expression-3-of-select
'programing' 카테고리의 다른 글
fragment화 권한을 확인하는 방법 (0) | 2022.11.17 |
---|---|
템플릿 엔진으로 언더스코어.js를 사용하는 방법 (0) | 2022.11.17 |
python에서 반복적으로 폴더 삭제 (0) | 2022.11.17 |
React.js에서 컴포넌트의 소품을 갱신할 수 있습니까? (0) | 2022.11.17 |
JHipster 6.0.1: 리퀴베이스 태스크 실패 (0) | 2022.11.17 |