2014-01-16 81 views
2

首先查詢內連接順序在我的查詢

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中的每個列(聚合除外)都必須位於組中?

enter image description here

回答

3

非常有趣。這是由於Postgres支持在group by子句中使用主鍵和唯一鍵,然後允許與每個鍵相關聯的列位於select而沒有聚合函數。 ANSI標準支持這一點。

問題是spelersnr不明確 - 它可能來自任一表。我猜Postgres默認爲解析查詢的第一個表。當列是主鍵時,則沒關係(因爲naam等來自該表)。當該列不是主鍵時,則會出現錯誤。

解決方案很簡單:

group by s.spelersnr 

我希望Postgres的發行像「spelersnr不明確」的錯誤 - 這意味着它不知道它是來自哪個表。如果您使用on子句而不是using子句,那麼對於這兩個查詢都應該會出現這樣的錯誤。