Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此MySQL查询转换为使用嵌套子查询的PostgreSQL?_Mysql_Sql_Postgresql - Fatal编程技术网

如何将此MySQL查询转换为使用嵌套子查询的PostgreSQL?

如何将此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

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 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