ORA-01427:单行子查询返回多行-在简单查询中

时间:2019-05-08 14:08:33

标签: sql oracle

以下简单的SQL查询在搜索某些特定对象编号时会产生ORA-01427错误。

SELECT OBJ

FROM A.TABLEA

WHERE (OBJ ='XXXXXX');

该查询工作正常,但当您选择一个OBJ时,存在另一个带有对应的后缀'XXXXXXA'的OBJ行时,查询可以正常工作。  即查询OBJ ='XXXXXXA'可以正常工作,但是查询OBJ ='XXXXXX'会产生错误,或者当没有对应的OBJ ='XXXXXYA'时查询OBJ ='XXXXXY'可以正常工作

有没有一种方法可以处理/避免错误,它将选择第一行/最后一行/随机的单行?

更进一步,而不是在我必须联接另一个表以获取日期的日期范围内搜索我想搜索的特定对象,该错误将显示是否存在带有相应“ XXXXXXA”的“ XXXXXX”在日期范围内。参见下面的代码,

SELECT
t1.*,
t2.OBJ,
t2.DATE

FROM
A.TABLEA t1
LEFT OUTER JOIN
A.TABLEB t2

ON (t1.OBJ = t2.OBJ)

WHERE
(t2.DATE BETWEEN TO_DATE ('2019/04/01', 'yyyy/mm/dd')
AND TO_DATE ('2019/04/30', 'yyyy/mm/dd');

有没有一种方法可以处理/避免此代码中的错误来迫使它选择1行?

谢谢。

1 个答案:

答案 0 :(得分:0)

我能够通过选择具有基本数据的正确数据表(而不是我最初选择的sql生成的表)并在对象编号的前12个字符上执行联接来解决这种情况,     (SUBSTR(t1.OBJ,1,12)= SUBSTR(t2.OBJ,1,12)

13个字符带有额外的A后缀。

感谢您的帮助。