2014-09-01 47 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字。