在 WITH 子句中使用多个 UNION ALL 语句
Using multiple UNION ALL statements in WITH clause
我的 table 看起来像这样:
CREATE TABLE gyerek (
gyereke INT,
szulonek INT
);
我试图在我的 WITH
子句中使用多个 UNION ALL
语句:
WITH testver (x, y) AS (
SELECT gy1.gyereke, gy2.gyereke
FROM gyerek gy1, gyerek gy2
WHERE gy1.szulonek = gy2.szulonek
AND gy1.gyereke <> gy2.gyereke
), rokon (x, y) AS (
SELECT * FROM testver
UNION ALL
(SELECT r1.x, gy1.gyereke
FROM rokon r1, gyerek gy1
WHERE r1.y = gy1.szulonek)
UNION ALL(SELECT gy1.gyereke, r1.y
FROM rokon r1, gyerek gy1
WHERE r1.x = gy1.szulonek)
)
SELECT * FROM rokon;
我收到以下错误:
ORA-32041: UNION ALL operation in recursive WITH clause must have only two branches
我的问题是:有没有办法使用多个UNION ALL
语句?如果没有,我如何实现最后两个 SELECT
语句的统一。
在递归中,您希望在 y
匹配中使用 x
,在 x
匹配中使用 y
。使用 CASE WHEN
检查哪一个匹配。
, rokon (x, y) AS (
SELECT x, y FROM testver
UNION ALL
SELECT CASE WHEN gy1.szulonek = r1.x THEN r1.y ELSE r1.x END, gy1.gyereke
FROM rokon r1
JOIN gyerek gy1 ON gy1.szulonek IN (r1.x, r1.y)
)
我的 table 看起来像这样:
CREATE TABLE gyerek (
gyereke INT,
szulonek INT
);
我试图在我的 WITH
子句中使用多个 UNION ALL
语句:
WITH testver (x, y) AS (
SELECT gy1.gyereke, gy2.gyereke
FROM gyerek gy1, gyerek gy2
WHERE gy1.szulonek = gy2.szulonek
AND gy1.gyereke <> gy2.gyereke
), rokon (x, y) AS (
SELECT * FROM testver
UNION ALL
(SELECT r1.x, gy1.gyereke
FROM rokon r1, gyerek gy1
WHERE r1.y = gy1.szulonek)
UNION ALL(SELECT gy1.gyereke, r1.y
FROM rokon r1, gyerek gy1
WHERE r1.x = gy1.szulonek)
)
SELECT * FROM rokon;
我收到以下错误:
ORA-32041: UNION ALL operation in recursive WITH clause must have only two branches
我的问题是:有没有办法使用多个UNION ALL
语句?如果没有,我如何实现最后两个 SELECT
语句的统一。
在递归中,您希望在 y
匹配中使用 x
,在 x
匹配中使用 y
。使用 CASE WHEN
检查哪一个匹配。
, rokon (x, y) AS (
SELECT x, y FROM testver
UNION ALL
SELECT CASE WHEN gy1.szulonek = r1.x THEN r1.y ELSE r1.x END, gy1.gyereke
FROM rokon r1
JOIN gyerek gy1 ON gy1.szulonek IN (r1.x, r1.y)
)