oracle 如何找到哪一行转弯超过一个:ORA-01427错误

sz81bmfz  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(109)

ORA-01427:“single-row subquery returns more than one row”错误。我知道这是什么意思,但我想找到哪一行变成多行,我想知道为什么子查询运行,但不创建新表。
以下是我的查询:

create table ana_ucret_indirim as
select v1.* , 
(select olmasi_gereken_indirim from indirimler_ana_ucretlerle_grup v2 where v2.tah_donem=v1.tah_donem and v2.abone_id= v1.abone_id and v2.bagli_tarife_id=v1.id) as olmasi_gereken_indirim
from ana_ucret_tablosuv1 v1

字符串
我可以运行这个部分:

select v1.* , 
(select olmasi_gereken_indirim from indirimler_ana_ucretlerle_grup v2 where v2.tah_donem=v1.tah_donem and v2.abone_id= v1.abone_id and v2.bagli_tarife_id=v1.id) as olmasi_gereken_indirim
from ana_ucret_tablosuv1 v1


但我不能创建一个表。

wbgh16ku

wbgh16ku1#

我想找出哪一行变成多行
从这个相关的子查询开始:

select olmasi_gereken_indirim 
from indirimler_ana_ucretlerle_grup v2 
where v2.tah_donem=v1.tah_donem and v2.abone_id= v1.abone_id and v2.bagli_tarife_id=v1.id

字符串
您可以使用以下聚合查询获取源表中的“重复项”;

select tah_donem, abone_id, bagli_tarife_id
from indirimler_ana_ucretlerle_grup v2 
group by tah_donem, abone_id, bagli_tarife_id
having count(*) > 1


我们还可以使用exists过滤查询的基表中确实存在的dup-这些是当你运行原始语句时会产生问题的元组:

select tah_donem, abone_id, bagli_tarife_id
from indirimler_ana_ucretlerle_grup v2 
where exists (
    select 1
    from ana_ucret_tablosuv1  v1
    where v2.tah_donem=v1.tah_donem and v2.abone_id= v1.abone_id and v2.bagli_tarife_id=v1.id
)
group by tah_donem, abone_id, bagli_tarife_id
having count(*) > 1

相关问题