MySQL # 1140 - Смешивание столбцов GROUP - PullRequest
12 голосов
/ 07 августа 2009

Привет, интересно, возможно, кто-то может пролить свет на приведенную ниже ошибку. 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 (MIN (), MAX (), COUNT (), ...) без GROUP столбцы недопустимы, если есть нет предложения GROUP BY`

Ответы [ 6 ]

13 голосов
/ 06 декабря 2009

Возможно, на вашем сервере ONLY_FULL_GROUP_BY включено. Вы можете либо отключить его, либо добавить каждое из выбранных полей в группу с помощью.

10 голосов
/ 06 декабря 2009

Причина, по которой отдельный столбец, использующий агрегатную функцию , работает, в то время как версия со столбцами, не использующими агрегатные функции, не работает, заключается в том, что вам нужно указать предложение 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 - это единственная база данных, о которой я знаю, которая поддерживает GROUP BY, где вы можете выборочно опускать столбцы - существует множество SO вопросов о том, почему запросы работают на MySQL но не может быть перенесен без изменения на другие базы данных. Очевидно, в вашем случае вам все еще нужно определить хотя бы один.

4 голосов
/ 06 декабря 2017

В Laravel Framework установка 'strict' => false в файле базы данных в папке config исправит это.

2 голосов
/ 27 июля 2018

когда вы используете агрегатные функции в sql, такие как sum (), min (), max (), вы должны использовать group by

Но в последнем sql вы должны использовать все столбцы в select как группу By.

для этого в проекте laravel, который вы используете в config-> database

'строгий' => ложный,

и очистите кеш конфигурации, запустив php artisan config: cache.

Я думаю, я буду более полезным для вас.

0 голосов
/ 10 октября 2015

У меня такая же проблема в старой версии MySQL 5.0. В более новой версии 5.5 это работает!

SELECT COUNT(*), id
FROM `cities` AS `c`
0 голосов
/ 07 августа 2009

вернул его к основам:

   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
...