首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WITH子句中使用多个UNION ALL语句

在WITH子句中使用多个UNION ALL语句
EN

Stack Overflow用户
提问于 2017-12-10 20:38:36
回答 1查看 3.4K关注 0票数 3

我的桌子是这样的:

代码语言:javascript
复制
CREATE TABLE gyerek (
    gyereke INT,
    szulonek INT
);

我试图在我的UNION ALL子句中使用多个WITH语句:

代码语言:javascript
复制
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语句的统一。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-10 21:34:28

在递归中,您希望在y匹配中继续使用x,在x匹配中继续使用y。使用CASE WHEN检查哪一个匹配。

代码语言:javascript
复制
, 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)
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47743205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档