我有一些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 从商店 WHERE default_wh = wh AND dc_id!='WMS' AND country_id&lt;&gt; 'PL' 和wh_add2不喜欢'%WH' 并存储不在90000和99999之间 并且不存储在6312978之间 和6312996)