在 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)
)