如何将此MySQL查询转换为使用嵌套子查询的PostgreSQL?
MySQL查询:如何将此MySQL查询转换为使用嵌套子查询的PostgreSQL?,mysql,sql,postgresql,Mysql,Sql,Postgresql,MySQL查询: SELECT * FROM ( (SELECT count(*) AS TC FROM tc where pID='22') AS tCount, (SELECT count(*) AS SC FROM sc where pID='22') AS sCount, (SELECT count(*) AS RS FROM results where pID='22'and isDeleted=false and status<>'Running')as
SELECT *
FROM
(
(SELECT count(*) AS TC FROM tc where pID='22') AS tCount,
(SELECT count(*) AS SC FROM sc where pID='22') AS sCount,
(SELECT count(*) AS RS FROM results where pID='22'and isDeleted=false and status<>'Running')as rCount
)
我的方法正确吗?如果是,那么如何完成此脚本。如果没有,那么上面的MySQL查询到PostgreSQL查询的转换是什么?尝试以下未经测试的方法:
SELECT
(SELECT COUNT(*) FROM tc WHERE pID='22') AS tCount,
(SELECT COUNT(*) FROM sc WHERE pID='22') AS sCount,
(SELECT COUNT(*) FROM results
WHERE pID='22' AND isDeleted=false
AND status<>'Running') AS rCount
我刚刚将子查询虚拟表更改为子查询虚拟列,修复了一些语句的整洁问题,并删除了一些不需要的列别名
编辑:我最初的答案是一个表,它是一些数据库系统上的一个虚拟表,用于完成一个不直接从实际表中选择的查询。由于它在您的情况下不起作用,我已经删除了它——根据维基百科的文章,PostgreSQL中不需要FROM子句。您不需要外括号。这项工作:
SELECT *
FROM
(SELECT count(*) AS TC FROM tc where pID='22') AS tCount,
(SELECT count(*) AS SC FROM sc where pID='22') AS sCount,
(SELECT count(*) AS RS FROM results where pID='22'
and isDeleted=false
and status<>'Running')as rCount
请注意,列名是tc、sc和rs。如果要进行tCount等操作,则必须更改count*语句后的别名。每个子查询都可以作为联接写入。将子查询重写为联接。另外,在将来尝试格式化您的代码,这对试图帮助您的人来说是礼貌的,因为这样可以让他们更容易地阅读您的问题。没有任何方法可以在没有连接的情况下用postgresql编写查询吗???。第一个查询不是按原样运行吗?这里提到错误时,这很正常,泄露那个错误的真正含义。有机会吗-@amdixon-每个子查询都可以表示为联接。这是一个事实,我真的无法将你与理论证明联系起来,因为我没有理论证明,现在谷歌搜索可能是作弊:但本质上,子查询和连接是一样的——连接实际上更容易让数据库解析和最终执行。你试过了吗,@Akash?最后尝试使用和不使用双精度-Wikipedia的文章说,PostgreSQL上不需要FROM子句。似乎没有双精度就可以工作,并且可以使用它。至少在我的9.3设置中。谢谢@mlinth。我在PostgreSQL上使用了DUAL,但文章建议它是作为视图创建的,而不是本地可用的。谢谢@halfer,没有DUAL它就可以工作。。。。。with dual显示关系dual不存在的错误..好的,太好了@Akash。你现在也了解了双表,这不是坏事。
SELECT *
FROM
(SELECT count(*) AS TC FROM tc where pID='22') AS tCount,
(SELECT count(*) AS SC FROM sc where pID='22') AS sCount,
(SELECT count(*) AS RS FROM results where pID='22'
and isDeleted=false
and status<>'Running')as rCount