条令SQL查询:在MySQL上工作,在PostgreSQL上工作;T

条令SQL查询:在MySQL上工作,在PostgreSQL上工作;T,mysql,zend-framework,postgresql,doctrine,portability,Mysql,Zend Framework,Postgresql,Doctrine,Portability,这是由ORM的标记扩展自动生成的查询 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.i

这是由ORM的标记扩展自动生成的查询

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中不起作用

我得到:
列i2\uu 1未找到
列I\uu 2未找到

使用COUNT(DISTINCT)时是否不允许使用别名?

此查询在PostgreSql上的运行情况如何?

您可以尝试将子选择的
HAVING
-子句中的
计数(DISTINCT i2.id)
替换为
i2\uu 1
,或者删除
计数(DISTINCT i2.id)
周围的括号


您可能还必须将
t\u name
添加到主选择的
groupby
-子句中。

您可以尝试将
i2\u 1
替换为子选择的
HAVING
-子句中的
COUNT(DISTINCT i2.id)
中的
COUNT(DISTINCT i2.id)


您可能还需要将
t\u name
添加到主select的
GROUP BY
-子句中。

谢谢,就这样。这是理论上的错误还是我版本的PostgreSql?或者PostgreSql根本不支持这种语法?哪个建议确实对您有所帮助?删除括号没有任何作用。我不得不在HAVINGs而不是别名中重复计数(会更慢吗?)。显然,t.name在GROUP BY中也是需要的。我不认为性能会受到影响。我不知道SQL Server,但Oracle也不支持生成的语法。我也不支持。坦白地说,我最近做了很多MySQL/Doctrine/PostgreSQL工作,我可以告诉你,与我在通过Doctrine运行MySQL的高端系统上所采取的一些措施相比,这样的性能打击算不了什么。谢谢,就是这样。这是理论上的错误还是我版本的PostgreSql?或者PostgreSql根本不支持这种语法?哪个建议确实对您有所帮助?删除括号没有任何作用。我不得不在HAVINGs而不是别名中重复计数(会更慢吗?)。显然,t.name在GROUP BY中也是需要的。我不认为性能会受到影响。我不知道SQL Server,但Oracle也不支持生成的语法。我也不支持。坦率地说,我最近做了很多MySQL/Doctrine/PostgreSQL工作,我可以告诉你,与我在通过Doctrine运行MySQL的高端系统上采取的一些措施相比,这样的性能打击算不了什么。