在没有连接的情况下重新编写查询。

发布于 2025-01-23 09:27:52 字数 1057 浏览 4 评论 0原文

我正在重写要替换的查询以删除 的连接:

SELECT *
FROM   ADM_TRT AT
       INNER JOIN UTILISATEUR U
       ON U.UTI_ID = AT.UTI_ID
       INNER JOIN
       (
         SELECT CM.MAI_ID
         FROM   CON_MAI CM
         CONNECT BY CM.MAI_PER_RES = PRIOR CM.MAI_ID
         START WITH CM.MAI_ID IN (
                                   SELECT MAJ_ID
                                   FROM   DROIT_LOGIN
                                   WHERE LOG_ID = 21543
                                 )
       ) CON_MAI_FILTERED_ON_LOGIN
       ON AT.TRT_MAI_ID = CON_MAI_FILTERED_ON_LOGIN.MAI_ID;

对于通过 part连接,我写了

WITH tree (MAI_ID,MAI_PER_RES, level1) AS  (
  SELECT MAI_PER_RES, MAI_ID, 1 as level1 FROM CON_MAI
  UNION ALL
  SELECT child.MAI_ID, child.MAI_PER_RES, parent.level1 + 1
  FROM CON_MAI child --Line 20
       JOIN tree parent
       on parent.MAI_PER_RES = child.MAI_ID
) 
SELECT MAI_ID FROM tree

这篇子查询。有人可以帮忙整合吗?

I am rewriting the query to replace to remove CONNECT BY:

SELECT *
FROM   ADM_TRT AT
       INNER JOIN UTILISATEUR U
       ON U.UTI_ID = AT.UTI_ID
       INNER JOIN
       (
         SELECT CM.MAI_ID
         FROM   CON_MAI CM
         CONNECT BY CM.MAI_PER_RES = PRIOR CM.MAI_ID
         START WITH CM.MAI_ID IN (
                                   SELECT MAJ_ID
                                   FROM   DROIT_LOGIN
                                   WHERE LOG_ID = 21543
                                 )
       ) CON_MAI_FILTERED_ON_LOGIN
       ON AT.TRT_MAI_ID = CON_MAI_FILTERED_ON_LOGIN.MAI_ID;

For CONNECT BY Part , I wrote this

WITH tree (MAI_ID,MAI_PER_RES, level1) AS  (
  SELECT MAI_PER_RES, MAI_ID, 1 as level1 FROM CON_MAI
  UNION ALL
  SELECT child.MAI_ID, child.MAI_PER_RES, parent.level1 + 1
  FROM CON_MAI child --Line 20
       JOIN tree parent
       on parent.MAI_PER_RES = child.MAI_ID
) 
SELECT MAI_ID FROM tree

But I am stuck to integrate this in subquery in the CONNECT BY sub-query. Can someone please help to integrate this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云淡月浅 2025-01-30 09:27:52

看来您的递归逆转了递归的子查询,并且可以使用:

WITH tree (MAI_ID) AS  (
  SELECT MAI_ID
  FROM   CON_MAI
  WHERE  MAI_ID IN ( SELECT MAJ_ID
                     FROM   DROIT_LOGIN
                     WHERE LOG_ID = 21543 )
UNION ALL
  SELECT c.MAI_ID
  FROM   CON_MAI c
         JOIN tree p
         on c.MAI_PER_RES = p.MAI_ID
)
SELECT *
FROM   ADM_TRT AT
       INNER JOIN UTILISATEUR U
       ON U.UTI_ID = AT.UTI_ID
       INNER JOIN tree CON_MAI_FILTERED_ON_LOGIN
       ON AT.TRT_MAI_ID = CON_MAI_FILTERED_ON_LOGIN.MAI_ID;

(未经测试,因为我没有您的表格或数据)

It looks like you have the recursion reversed in the recursive sub-query and can use:

WITH tree (MAI_ID) AS  (
  SELECT MAI_ID
  FROM   CON_MAI
  WHERE  MAI_ID IN ( SELECT MAJ_ID
                     FROM   DROIT_LOGIN
                     WHERE LOG_ID = 21543 )
UNION ALL
  SELECT c.MAI_ID
  FROM   CON_MAI c
         JOIN tree p
         on c.MAI_PER_RES = p.MAI_ID
)
SELECT *
FROM   ADM_TRT AT
       INNER JOIN UTILISATEUR U
       ON U.UTI_ID = AT.UTI_ID
       INNER JOIN tree CON_MAI_FILTERED_ON_LOGIN
       ON AT.TRT_MAI_ID = CON_MAI_FILTERED_ON_LOGIN.MAI_ID;

(untested as I do not have your tables or data)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文