2013-12-24 2 views
3

Мы пытаемся запустить этот запрос.Группа Запрашивая дополнительные столбцы

select ccr.id as id, ccr.title as name, c.name as contract, ccr.status as status 
from change_request ccr 
LEFT JOIN contract c ON ccr.contract_id = c.id 
where ccr.id < 2000 
GROUP BY ccr.id, c.id 
order by id 

он бросает ошибку * ** Ошибка ** *

ОШИБКА: колонка "ccr.title" должен появиться в GROUP BY или быть пунктом используемый в агрегированной функции Состояние SQL: 42803 Характер: 22

Почему он запрашивает несколько столбцов из одной таблицы. Я имею в виду, если мы будем группировать ccr.id, тогда не следует задавать все столбцы из одной таблицы.

Более интересно то, что следующий запрос (аналогичный выше) работает нормально.

select aim.id as id, aim.name as name, c.name as contract, aim.planned_completion_date as plannedcompetitiondate 

from action_item_mgmt aim 
LEFT JOIN contract c ON aim.contract_id = c.id 

WHERE aim.id < 2000 
group by aim.id, c.id 
order by id 
+0

Является ли 'ccr.id' основным ключом таблицы change_request? Я знаю, что это логично, но похоже, что столбцы идентичности не обязательно являются первичными ключами. Чтобы Postgresql знал, что другие столбцы в таблице функционально зависят от 'id', он должен быть помечен как первичный ключ – GarethD

+0

Спасибо, у нас возникла проблема. это именно так. Это не первичный ключ. –

+0

Ваш запрос будет работать, если вы используете MySQL. Но для другого сервера базы данных обязательно указывать каждый столбец, кроме тех столбцов, которые содержат агрегатные функции. –

ответ

1

Единственный способ увидеть, что ваш первый запрос не будет работать, если столбец id не является основным ключом таблицы change_request.

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

2

Там нет агрегации (например, count(), sum(), avg() и т.д.) в любом запросе: Удалите условие group by вообще.

+0

В реальном запросе есть больше таблиц (я не могу отправить точный запрос). Во время отладки для этой ошибки я уменьшил запрос до этого простого запроса. Также почему другой запрос работает нормально. –

+0

, но не используются агрегированные функции, поэтому 'group by' не имеет смысла – Bohemian

Смежные вопросы