条令SQL查询:在MySQL上工作,在PostgreSQL上工作;T
这是由ORM的标记扩展自动生成的查询条令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
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的高端系统上采取的一些措施相比,这样的性能打击算不了什么。