【问题标题】:ORA-01427: single-row subquery returns more than one row - on simple queryORA-01427: 单行子查询返回多于一行 - 在简单查询中
【发布时间】:2019-05-08 14:08:33
【问题描述】:

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

SELECT OBJ

FROM A.TABLEA

WHERE (OBJ ='XXXXXX');

查询工作正常,除非您选择一个 OBJ,其中有另一个 OBJ 行具有相应的 A 后缀“XXXXXXA”。 即查询 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 行?

提前致谢。

【问题讨论】:

  • 您只显示了查询的一部分,因为我在您的问题中没有看到子查询。
  • 您显示的查询不会导致该错误。
  • 你能提供一些示例数据吗?
  • 我没有看到子查询。
  • 感谢您的帮助,我了解它是一个没有子查询的简单查询。我无法从问题表中提取会导致问题的数据,因为无论我如何查询它都会出现此错误,无论是搜索特定对象编号还是仅获取 x 行数。我相信这个错误是通过它自己的 sql 代码创建表引起的(我不确定表是如何生成它的数据的),当一个对象用 A 后缀重做时会导致一个错误(额外的数据得到放入原始对象编号中没有的内容)。

标签: sql oracle


【解决方案1】:

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

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

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多