Oracle SQL Query运行五十次

时间:2017-11-08 19:12:08

标签: sql oracle subquery

我遇到查询问题。我正在尝试使用子查询从db查询返回单个值(最后我需要有多个返回单个值的子查询。我继续返回50行,但每个都有相同的值。

如果我单独运行子查询,它只返回一个值,但当我将它用作子查询时,它返回许多行。这是Oracle SQL可以让任何人看到我可能做错了吗?

感谢您的帮助。

SELECT (SELECT COALESCE(avg(elapsedtime),0) 
    FROM TableName WHERE functioncallid = 'functionName'))   
    "newname" FROM TableName

1 个答案:

答案 0 :(得分:2)

从概念上讲,您的查询具有基本格式:

SELECT (scalar-subquery) FROM TableName

您正在从TableName中选择所有行,并且每个行都返回子查询的值。我假设该表有50行,这就是为什么你看到50倍的值。这与SELECT 1 FROM TableName没有什么不同。

快速解决方法是在外部查询中使用DUAL作为行源:

SELECT (scalar-subquery) FROM DUAL

DUAL是一行一列表。这将导致您的子查询结果返回一次。如果您希望将其他子查询作为其他列,则可以轻松完成:

SELECT (scalar-subquery), (other-scalar-subquery) FROM DUAL

你可能会以错误的方式解决这个问题。如果各个子查询中的谓词相同,则根本不需要嵌套查询:

SELECT COALESCE(avg(elapsedtime),0) , COALESCE(max(elapsedtime),0)
FROM TableName WHERE functioncallid = 'functionName'