我不是一个很大的ORACLE - SQL专家,所以我希望有人知道找到“重复”记录的好方法,这会导致:单行子查询返回多行错误。
我的陈述:
SELECT
CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
(SELECT DR_OPTION
FROM
DR_OPTIONS
WHERE DR_OPTIONS.ID = (
select dr_option from applications where applications.sap_sid = af.sap_sid)) DR_OPTION
FROM
APPLICATIONS_FILER_VIEW af
它适用于我的测试系统,因此我“确定”可用数据记录中必定存在错误,但我不知道如何找到它们。
答案 0 :(得分:6)
尝试使用此查询:
select applications.sap_sid, count(dr_option)
from applications
group by applications.sap_sid
having count(dr_option) > 1
这应该为您提供重复行的sap_sid
答案 1 :(得分:1)
我建议简化您的查询:
SELECT CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
dr.DR_OPTION
FROM APPLICATIONS_FILER_VIEW af
INNER JOIN applications a ON af.sap_sid = a.sap_sid
INNER JOIN DR_OPTIONS dr ON a.dr_option = dr.ID
答案 2 :(得分:1)
我会调查你跑步时得到的结果:
select dr_option from applications where applications.sap_sid = af.sap_sid
但你可以强制只返回一行(我认为这是一个软糖,并且不建议使用它至少添加一个顺序,以便对返回的行进行一些控制),例如:
SELECT
CAST(af.SAP_SID AS VARCHAR2(4000)) APP_ID,
(SELECT DR_OPTION
FROM
DR_OPTIONS
WHERE DR_OPTIONS.ID = (
select dr_option
from applications
where applications.sap_sid = af.sap_sid
and rownumber = 1)
) DR_OPTION
FROM
APPLICATIONS_FILER_VIEW af
(未测试只是谷歌搜索如何限制oracle中的结果)
如果您修复了数据问题(根据A.B.Cades评论),那么我建议根据weenoid的答案将其转换为使用连接。这也将突出显示未来可能出现的其他数据问题。
简而言之:我从来没有用这种方式解决任何问题。真正的答案是调查返回的多行并决定你想做什么: