我遇到查询问题。我正在尝试使用子查询从db查询返回单个值(最后我需要有多个返回单个值的子查询。我继续返回50行,但每个都有相同的值。
如果我单独运行子查询,它只返回一个值,但当我将它用作子查询时,它返回许多行。这是Oracle SQL可以让任何人看到我可能做错了吗?
感谢您的帮助。
SELECT (SELECT COALESCE(avg(elapsedtime),0)
FROM TableName WHERE functioncallid = 'functionName'))
"newname" FROM TableName
答案 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'