我有一个带有一些子查询的PL / SQL查询(SELECT) . 当查询中的第一个SELECT(主SELECT)没有DISTINCT时,它不会产生任何错误 . 当我向SELECT语句添加'DISTINCT'或进行这样的构造时:

SELECT DISTINCT *
FROM
( query )

而不是产生错误:“ORA-01427 - 单行子查询返回多行” .

在这种情况下,是否可以从查询中选择不同的行,以便不会出现错误?

整体观点:

WITH dane AS
(
select
          col,
          col_type,
          kio,
          some2_id,
          CASE
             kioen NVL (x.some_id, s.some_id) < 133
             THEN
                DECODE (der,  5032, 5006,  5033, 5006,  der)
             ELSE
                der
          END
             AS der,
          CASE
             kioen NVL (x.some_id, s.some_id) < 133
             THEN
                DECODE (region,  5032, 5006,  5033, 5006,  region)
             ELSE
                region
          END
             AS region,
          CASE
             kioen NVL (x.some_id, s.some_id) < 133
             THEN
                DECODE (tre,  5032, 5006,  5033, 5006,  tre)
             ELSE
                tre
          END
             AS tre,
          lop,
          CASE
             kioen NVL (x.some_id, s.some_id) < 133
             THEN
                DECODE (tre,  5032, 'KAH',  5033, 'KAH',  something2_id)
             ELSE
                DECODE (tre,
                        5032, 'KAH Non',
                        5033, 'KAH',
                        something2_id)
          END
             AS something2_id,
          NVL (x.some_id, s.some_id) some_id
FROM
((SELECT cols.col,
                  cols.col_type,
                  cols.some2_id,
                  cols.der,
                  cols.region,
                  cols.tre,
                  cols.lop,
                  kio,
                  DECODE (cols.tre, 5006, 'KAH', cga.something2_id)
                     something2_id,
                  cga.some_id
             FROM (SELECT s.typ col,
                          'S' col_Type,
                          some2_id,
                          s.der,
                          region,
                          tre,
                          lop
                     FROM typ s, typ_j sh
                    kioere S.typ = sh.typ
                   UNION ALL
                   SELECT kio,
                          'W' col_type,
                          NVL (
                             (SELECT DISTINCT some2_id
                                FROM typ
                               kioere     default_kio = kio
                                     AND dc_id != 'TRY'
                                     AND some2_id <> 'PL'
                                     AND kio_add2 NOT LIKE '%kio'
                                     AND typ NOT BETWEEN 90000 AND 99999
                                     AND typ NOT BETWEEN 6312978
                                                       AND 6312996),
                             kio.some2_id)
                             some2_id,
                          -1 AS der,
                          -1 AS region,
                          -1 AS tre,
                          -1 AS lop
                     FROM kio) cols
                  LEFT JOIN
                  (SELECT cg.something2_id,
                          cgs.some_id,
                          cgd.some2_id,
                          c.country_desc,
                          cgd.tre,
                          a.tre_NAME,
                          cha.lop_NAME
                     FROM z_some cg
                          JOIN z_some_mv cgs
                             ON cg.something2_id = cgs.something2_id
                          JOIN z_some_detail cgd ON cgs.id = cgd.id
                          JOIN country c ON c.some2_id = cgd.some2_id
                          JOIN tre a ON a.tre = cgd.tre
                          JOIN lop cha ON cha.lop = a.lop
                    kioere cgs.active = 'Y') cga
                     ON     cga.tre = cols.tre
                        AND cga.some2_id = cols.some2_id)x
        LEFT JOIN opi s ON x.some_id IS NULL)
)
select distinct * from dane;

(我重命名了表名等)

此子查询存在问题:(SELECT DISTINCT country_id FROM store WHERE default_wh = wh AND dc_id!='WMS'AND country_id <>'PL'AND_add2 NOT LIKE'%WH'并且不存储90000和99999并且不存储在6312978之间AND 6312996)