第一次查询
select name, letters, date, count(p.playernumber) as data
from players p inner join fines f using(playernumber)
group by playernumber
第二次查询
select name, letters, date, count(p.playernumber) as data
from fines f inner join players p using(spelersnr)
group by playernumber
第二个查询时,第一个查询无法运行。我认为内连接的顺序无关紧要?为什么第二个查询能够运行,因为我认为select(聚合除外)中的每一列都必须在组中?
答案 0 :(得分:3)
非常有趣。这是因为Postgres支持在group by
子句中使用主键和唯一键,然后允许与每个键关联的列在select
中而没有聚合函数。 ANSI标准支持这一点。
问题是spelersnr
含糊不清 - 它可能来自任何一个表。我猜Postgres默认使用第一个表来解析查询。当列是主键时,它就可以了(因为naam
等来自该表)。当列不是主键时,则会出现错误。
解决方案很简单:
group by s.spelersnr
我希望Postgres发出一个错误,例如“spelersnr
含糊不清” - 这意味着它不知道它来自哪个表。如果您使用on
子句而不是using
子句,则两个查询都会出现这样的错误。