收到“单行子查询返回多行”错误
Posted
技术标签:
【中文标题】收到“单行子查询返回多行”错误【英文标题】:Receiving "single-row subquery returns more than one row" error 【发布时间】:2019-11-13 21:05:20 【问题描述】:我正在尝试为特定月份的给定“帐户”返回一组属性。帐户被定义为三个属性的串联。我的代码如下。子查询本身在单独运行时有效,但在同时用于 SELECT 和 WHERE 子句时不起作用。我正在使用 Oracle SQL Developer 运行查询。如果有办法修改此查询,使其返回任何/所有适用的记录,那就太好了。任何帮助将不胜感激。
错误信息: ORA-01427: 单行子查询返回多于一行 01427. 00000 - “单行子查询返回多于一行” *原因: *行动:
SELECT
MONTH_KEY,
(
(SELECT DISTINCT CAST (NUMBER_ATTRIBUTE_1
|| SUBSTR((10000000000 + NUMBER_ATTRIBUTE_2),-10,10)
|| SUBSTR((10000000000 + NUMBER_ATTRIBUTE_3),-10,10) AS VARCHAR(32))
FROM TABLE)
)
AS DERIVED_ATTRIBUTE,
NAME,
ANOTHER_VARIABLE
FROM TABLE
WHERE
(SELECT DISTINCT CAST (NUMBER_ATTRIBUTE_1
|| SUBSTR((10000000000 + NUMBER_ATTRIBUTE_2),-10,10)
|| SUBSTR((10000000000 + NUMBER_ATTRIBUTE_3),-10,10) AS VARCHAR(32))
FROM TABLE)
)
= (12345678900000000010000000001)
AND MONTH_KEY = (201903)
;
编辑: 谢谢@Ankit Bajpai。您建议的代码完美运行,并为我输入的所有指定的串联“DERIVED_ATTRIBUTE”返回一条记录。
【问题讨论】:
请向我们展示整个查询。 独立运行 WHERE 子句子查询,看看它返回了多少行。 标量子查询(SELECT 子句中的 (SELECT ...) 语句 - 别名为 DERIVED_ATTRIBUTE)返回超过 1 行。 如果@Ankit Bajpai 提供了对您有帮助的解决方案,请考虑upvoting and/or accepting their answer。接受的答案提高了本网站对其他搜索者的质量。甚至只是说 thanks 作为对答案的 comment,这比嵌入在您的问题中的编辑更清晰。 【参考方案1】:您不需要三次选择同一个表,因为您已经从 TABLE 中选择了数据。您可以尝试以下查询 -
SELECT MONTH_KEY
,CAST(NUMBER_ATTRIBUTE_1 ||
SUBSTR((10000000000 + NUMBER_ATTRIBUTE_2),-10,10) ||
SUBSTR((10000000000 + NUMBER_ATTRIBUTE_3),-10,10) AS VARCHAR(32)) AS DERIVED_ATTRIBUTE
,NAME
,ANOTHER_VARIABLE
FROM TABLE
WHERE CAST (NUMBER_ATTRIBUTE_1 ||
SUBSTR((10000000000 + NUMBER_ATTRIBUTE_2),-10,10) ||
SUBSTR((10000000000 + NUMBER_ATTRIBUTE_3),-10,10) AS VARCHAR(32)) = (12345678900000000010000000001)
AND MONTH_KEY = 201903
【讨论】:
以上是关于收到“单行子查询返回多行”错误的主要内容,如果未能解决你的问题,请参考以下文章