2010-04-15 36 views
1

這是一個由Taggable擴展自動生成的用於Doctrine ORM的查詢。Doctrine SQL查詢:適用於MySQL,PostgreSQL不會

SELECT t.id AS t__id, t.name AS t__name, COUNT(DISTINCT i.id) AS i__0, 
    (COUNT(DISTINCT i.id)) AS i__1 
FROM taggable_tag t 
LEFT JOIN cms__model__image_taggable_tag c ON (t.id = c.tag_id) 
LEFT JOIN image i ON i.id = c.id 
WHERE t.id IN 
    (SELECT doctrine_subquery_alias.id 
    FROM 
     (SELECT DISTINCT t2.id, (COUNT(DISTINCT i2.id)) AS i2__1 
     FROM taggable_tag t2 
     LEFT JOIN cms__model__image_taggable_tag c2 ON (t2.id = c2.tag_id) 
     LEFT JOIN image i2 ON i2.id = c2.id 
     GROUP BY t2.id HAVING i2__1 > 0 
     ORDER BY i2__1 DESC LIMIT 10) AS doctrine_subquery_alias) 
GROUP BY t.id HAVING i__1 > 0 
ORDER BY i__1 DESC 

它適用於使用MySql時,但不適用於PostgreSql。

我收到:column i2__1 not foundcolumn i__2 not found

當使用COUNT(DISTINCT)時,別名是否被禁止?
這個查詢應該如何在PostgreSql上工作?

回答

1

您可以嘗試在HAVING條款的子選擇中替換i2__1COUNT(DISTINCT i2.id)或刪除圍繞COUNT(DISTINCT i2.id)的括號。

您可能還需要將t__name添加到主選擇的GROUP BY條款中。

+0

謝謝,就是這樣。這是一個在Doctrine或我的PostgreSql版本中的錯誤?或者只是PostgreSql不支持這種語法? – takeshin 2010-04-15 17:51:11

+0

哪個建議對你有幫助? – 2010-04-15 17:56:15

+0

刪除括號什麼也沒做。我不得不在HAVING中重複COUNT而不是別名(它會變慢嗎?)。顯然,在GROUP BY中也需要t.name。 – takeshin 2010-04-15 18:08:14