2016-10-25 123 views
0

我有一個查詢,其目的是輸出所有角色爲"PPC""paygroups"這些PPC所屬的電子郵件。ORA-01427:單行子查詢返回多行 - 如何解決?

  • 有許多薪酬組。
  • 每個paygroup可以有多個PPCs
  • 每個PPC可能有一個email address 1和/或一個email address 2

的查詢工作正常,當我使用測試paygroup(BOX),但是當我評論說,行出查詢所有paygroups全部歸還所有paygroupsPPCs我得到的錯誤"single-row subquery returns more than one row"

SELECT 
auth.paygroup, 
per.NAME, 
per.email_address AS "Personal email", 
per.email_address2 AS "Business email" 

FROM ps_personal_data per 

INNER JOIN ps_ts_ee_auth auth 
ON auth.emplid=per.emplid 

INNER JOIN PS_SMS_SUBSCRB_TBL SUB 
ON SUB.SUBSCRIBER_ID = AUTH.PAYGROUP 

WHERE 1=1  
AND SUB.EFFDT = (SELECT max (SUB2.effdt) FROM PS_SMS_SUBSCRB_TBL SUB2 
    WHERE SUB.SUBSCRIBER_ID = SUB2.SUBSCRIBER_ID AND SUB.EFF_STATUS = 'A') 
AND auth.user_name = (SELECT R1.USER_NAME FROM PS_TS_CONTACT_ROLE R1 
         WHERE 1=1 
         AND R1.contact_role = 'PPC' 
        --AND R1.paygroup = 'BOX' --commenting this line out causes the error. It works fine when line is active 
         AND R1.action_dt = (SELECT MAX (R2.action_dt) 
             FROM PS_TS_CONTACT_ROLE R2 
             WHERE 1=1 
             AND R1.paygroup = R2.paygroup 
             AND R1.contact_role =         
             R2.contact_role)) 
+1

第1步 - 確定你想要哪一行。 –

回答

1
SELECT 
auth.paygroup, 
per.NAME, 
per.email_address AS "Personal email", 
per.email_address2 AS "Business email" 

FROM ps_personal_data per 

INNER JOIN ps_ts_ee_auth auth 
ON auth.emplid=per.emplid 

INNER JOIN PS_SMS_SUBSCRB_TBL SUB 
ON SUB.SUBSCRIBER_ID = AUTH.PAYGROUP 

WHERE 1=1  
AND SUB.EFFDT = (SELECT max (SUB2.effdt) FROM PS_SMS_SUBSCRB_TBL SUB2 
    WHERE SUB.SUBSCRIBER_ID = SUB2.SUBSCRIBER_ID AND SUB.EFF_STATUS = 'A') 
AND auth.user_name in (SELECT R1.USER_NAME FROM PS_TS_CONTACT_ROLE R1 -- Change = to in 
         WHERE 1=1 
         AND R1.contact_role = 'PPC' 
         AND R1.paygroup = 'BOX' --commenting this line out causes the error. It works fine when line is active 
         AND R1.action_dt = (SELECT MAX (R2.action_dt) 
             FROM PS_TS_CONTACT_ROLE R2 
             WHERE 1=1 
             AND R1.paygroup = R2.paygroup 
             AND R1.contact_role =         
             R2.contact_role)) 
+0

好吧,沒有更多的錯誤消息。但是你確定它會回報OP的期望嗎? – jarlh

+0

這工作..謝謝! –

相關問題