选择语句中的ora-01427

时间:2017-06-27 09:59:00

标签: sql oracle

以下查询给了我一个ora-01427 我已经找到了那个异常是什么,以及如何解决它的一些解决方案,但不是在我的情况下。有没有办法可以找出重复的行?

ORA-01427: single-row subquery returns more than one row
01427. 00000 -  "single-row subquery returns more than one row"

这是我的问题:

    SELECT rec.*, 
    (select date_tt 
     from TREATMENT_TERMINAT tr, RECIPIENT rec
     where tr.SCANDIANUMBER = rec.SCANDIANUMBER) DATE_TT
FROM RECIPIENT rec;

由于

3 个答案:

答案 0 :(得分:1)

可能是这样的吗?

select date_tt, COUNT(*) AS RC 
     FROM RECIPIENT rec
     LEFT JOIN tr ON tr.SCANDIANUMBER = rec.SCANDIANUMBER
GROUP BY date_tt

答案 1 :(得分:1)

使用显式联接,如果可能不匹配date_tt,可能会离开,只返回列。

SELECT rec.*, 
       DATE_TT
FROM RECIPIENT rec
left join tr
on tr.SCANDIANUMBER = rec.SCANDIANUMBER
;

旧式连接已过时,请将教你的人加入逗号,将它们插入大炮,并将它们射入太阳。

答案 2 :(得分:1)

据推测,您需要一个相关的子查询。那将是:

select rec.*, 
       (select tr.date_tt 
        from TREATMENT_TERMINAT tr
        where tr.SCANDIANUMBER = rec.SCANDIANUMBER
       ) as DATE_TT
from RECIPIENT rec;

请注意从子查询中删除RECIPIENT

如果上述问题仍然存在,那么这里有三个解决方案:

  • and rownum = 1添加到where子句。
  • select更改为select max(date_tt)
  • 使用listagg()获取所有值:select listagg(date_tt, ',') within group (order by date_tt)

要查找问题行,请使用group by。以下内容包含所有重复项:

select tr.SCANDIANUMBER 
from TREATMENT_TERMINAT tr
group by tr.SCANDIANUMBER
having count(*) > 1;