2014-11-21 2 views
0

Таким образом, объект этого запроса должен отображать идентификатор, фамилию и имя преступника (все они могут быть найдены в таблице «Преступники»), а затем только для отображения преступников, у которых более одного предложения, что я сделал с помощью предложения HAVING, которое отображает условие, что преступник должен иметь более одного предложения_prend_id (первичный ключ таблицы предложения). Когда я напечатал в следующем коде, однако, я получил ошибку, что сказал «Столбцы, которые используются для именованного присоединиться (либо естественное соединение или JOIN с ПРИМЕНЕНИЕМ п) не может иметь явный спецификатор.Проблема с GROUP BY, HAVING и JOINS

SELECT c.criminal_id, c.last, c.first 
FROM criminals c JOIN sentences s USING (criminal_id) 
GROUP BY s.criminal_id 
HAVING COUNT(s.sentence_id) > 1; 

Я попытался удалить квалификаторы (которые, как я понимаю, являются c и s, которые предшествуют именам столбцов), но затем я получил сообщение об ошибке, в котором говорилось, что запрос не является выражением GROUP BY. Я вытягиваю свои волосы здесь, пытаясь понять эту штуку. Если вы можете помочь, я бы очень признателен за это. Спасибо.

ответ

0

Nevermind! Если кто-то еще это видит, я нашел настоящую ошибку. Я удалил квалификаторы. что при выборе нескольких столбцов при использовании группы Предложение P BY, вы должны выполнять НЕ-агрегатные функции GROUP BY ALL. Таким образом, мой правильный код:

SELECT criminal_id, last, first 
FROM criminals JOIN sentences USING (criminal_id) 
GROUP BY criminal_id, last, first 
HAVING COUNT(sentence_id) > 1; 

Надеюсь, это поможет кому-то еще, кто наткнулся на этот вопрос.

+2

Я бы порекомендовал поставить псевдоним на 'c.last, c.first'. Еще лучше, избегайте синтаксиса USING и сделайте его явным: 'ON c.criminal_id = s.criminal_id'. –

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