2014-09-01 50 views
0

當我在sql開發人員中執行以下查詢時,出現以下錯誤消息 「Ora-01427單行子查詢返回多於一行「ORA-01427:單行子查詢爲以下查詢返回多個行

select TPNATIVENAME as PTPNAME, 
     INTERFACENAME as CTPNAME, 
     DIRECTIONALITY, 
     NENAME, 
     NCNAME 
from TP , 
    (select DIRECTIONALITY 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
     from AFFECTEDXCS 
     where PXCID = -124)), 
    (select NODE.NAME as NENAME, 
      NC.NAME as NCNAME 
    from NODE NODE, 
     NETWORKCONTROLLER NC 
    where NODE.HANDLE = 
     (select unique SRCNEID 
     from SNCCOMPONENT 
     where SNCID = 
      (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)) 
    and NC.HANDLE = NODE.NCHANDLE) 
where NEID = 
    (select SRCNEID 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)) 
    and TPID = 
    (select SRCTP 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)) 
union 
select TPNATIVENAME as PTPNAME, 
     INTERFACENAME as CTPNAME, 
     DIRECTIONALITY, 
     NENAME, 
     NCNAME 
from TP, 
    (select DIRECTIONALITY 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
     from AFFECTEDXCS 
     where PXCID = -124)), 
    (select NODE.NAME as NENAME, 
      NC.NAME as NCNAME 
    from NODE NODE, 
     NETWORKCONTROLLER NC 
    where NODE.HANDLE = 
     (select unique SRCNEID 
     from SNCCOMPONENT 
     where SNCID = 
      (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)) 
    and NC.HANDLE = NODE.NCHANDLE) 
where NEID = 
    (select SINKNEID 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)) 
    and TPID = 
    (select SINKTP 
    from SNCCOMPONENT 
    where SNCID = 
     (select unique SNCID 
      from AFFECTEDXCS 
      where PXCID = -124)); 

我沒有得到哪個內部查詢返回多個值以及如何解決這個錯誤?

+0

您需要縮小問題範圍。每個單獨的子查詢都是獨立的,並確定它是否返回多行。除非你要給我們一個可重複的測試用例,否則我們無法真正做很多調試問題。 – 2014-09-01 06:10:03

+0

她可以找到一個sql格式化程序:http://sqlformat.org/ – miracle173 2014-09-01 06:46:17

回答

1
SELECT UNIQUE X FROM Y 

此查詢不保證您的查詢將返回單行。它可能會返回多行。它只保證它不會多次返回相同的X.

因此,您需要使用IN而不是=

例如:

SELECT SINKTP FROM SNCCOMPONENT 
WHERE SNCID IN (SELECT UNIQUE SNCID FROM AFFECTEDXCS WHERE PXCID = -124) 
0

確保這些SQL只給你一個值:

SELECT UNIQUE SNCID 
    FROM AFFECTEDXCS 
WHERE PXCID = -124 

SELECT SRCNEID 
    FROM SNCCOMPONENT 
WHERE SNCID = (
       SELECT UNIQUE SNCID 
        FROM AFFECTEDXCS 
       WHERE PXCID = -124 
       ) 

SELECT UNIQUE SRCNEID 
    FROM SNCCOMPONENT 
WHERE SNCID = (
       SELECT UNIQUE SNCID 
        FROM AFFECTEDXCS 
       WHERE PXCID = -124 
       ) 

SELECT SINKNEID 
    FROM SNCCOMPONENT 
WHERE SNCID = (
       SELECT UNIQUE SNCID 
        FROM AFFECTEDXCS 
       WHERE PXCID = -124 
       ) 

SELECT SINKTP 
    FROM SNCCOMPONENT 
WHERE SNCID = (
       SELECT UNIQUE SNCID 
        FROM AFFECTEDXCS 
       WHERE PXCID = -124 
       ) 

如果一個(或多個)將返回一個以上行,作爲一個快速解決方案,您可以將rownum < 2謂詞添加到where子句或將=標識替換爲IN字。