分组依据、拥有和加入的问题



所以这个查询的目的是显示罪犯的ID,姓氏和名字(所有这些都可以在"罪犯"表中找到),然后只显示具有多个句子的罪犯 - 我通过使用HAVE子句来显示罪犯必须具有多个sentence_id的条件(句子表主键)。但是,当我键入以下代码时,我收到一个错误,指出"用于命名联接(NATURAL 联接或带有 USING 子句的联接)的列不能具有显式限定符。

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 表达式。我在这里拔头发,试图弄清楚这件事。如果你能帮忙,我将不胜感激。谢谢。

关系!如果其他人看到这个,我发现了真正的错误。我删除了限定符。真正的问题是,当您在使用 GROUP BY 子句时选择多个列时,您必须按所有非聚合函数进行分组。所以我的正确代码是这样的:

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

希望这可以帮助其他偶然发现这个问题的人。

最新更新