与 CONNECT_BY_ROOT 的左外连接
LEFT OUTER JOIN with CONNECT_BY_ROOT
我有
SELECT
CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
并希望将 table CONTENT
.
中的每个条目添加到 CONTENTNAME
列
我试过:
SELECT
CONNECT_BY_ROOT TCT.CONTENTNAME AS ENDNODECONTENTNAME
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
期望相同的结果,只是 CONNECT_BY_ROOT
使用 1 个额外的列:CONTENTNAME
来自 CONTENT
,由 IDCONTENT
关联;如果没有关联内容,则应为 NULL
(IDCONTENT
为 NULL
)
相反,我只得到 IDCONTENT
不是 NULL
的行。我该怎么做才能获得这些行?
我也试过:
SELECT
CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
我也试过了
SELECT
SYS_CONNECT_BY_PATH(TAXY.CATEGORYNAME, ' \ ') AS BREADCRUMBSPATH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
START WITH TAXY.IDPARENTCATEGORY IS NULL CONNECT BY TAXY.IDPARENTCATEGORY = PRIOR TAXY.IDCATEGORY
但我得到相同的结果(只有 IDCONTENT
不是 NULL
的值)
最奇怪的是查询昨天在开发数据库上按预期工作,现在却不是。所以我创建了一个 fiddle 来检查我是否可以重现以前的结果并且它工作正常...... http://sqlfiddle.com/#!4/ecb9d/1 http://sqlfiddle.com/#!4/ecb9d/3
是什么导致了这种行为变化?
我仍然不知道发生了什么(仍然没有用)但是这个解决方案在这两种情况下似乎都工作得很好:
SELECT IDBRANCH, ENDNODEIDCONTENT, IDCATEGORY, IDPARENTCATEGORY, TAXYJ.IDCONTENT, TCT.CONTENTNAME AS ENDNODECONTENTNAME, CATEGORYNAME, LVL
FROM (
SELECT CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, CONNECT_BY_ROOT TAXY.IDCONTENT AS ENDNODEIDCONTENT
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
) TAXYJ
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXYJ.ENDNODEIDCONTENT
我有
SELECT
CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
并希望将 table CONTENT
.
CONTENTNAME
列
我试过:
SELECT
CONNECT_BY_ROOT TCT.CONTENTNAME AS ENDNODECONTENTNAME
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
期望相同的结果,只是 CONNECT_BY_ROOT
使用 1 个额外的列:CONTENTNAME
来自 CONTENT
,由 IDCONTENT
关联;如果没有关联内容,则应为 NULL
(IDCONTENT
为 NULL
)
相反,我只得到 IDCONTENT
不是 NULL
的行。我该怎么做才能获得这些行?
我也试过:
SELECT
CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
我也试过了
SELECT
SYS_CONNECT_BY_PATH(TAXY.CATEGORYNAME, ' \ ') AS BREADCRUMBSPATH
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TCT.CONTENTNAME
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXY.IDCONTENT
START WITH TAXY.IDPARENTCATEGORY IS NULL CONNECT BY TAXY.IDPARENTCATEGORY = PRIOR TAXY.IDCATEGORY
但我得到相同的结果(只有 IDCONTENT
不是 NULL
的值)
最奇怪的是查询昨天在开发数据库上按预期工作,现在却不是。所以我创建了一个 fiddle 来检查我是否可以重现以前的结果并且它工作正常...... http://sqlfiddle.com/#!4/ecb9d/1 http://sqlfiddle.com/#!4/ecb9d/3
是什么导致了这种行为变化?
我仍然不知道发生了什么(仍然没有用)但是这个解决方案在这两种情况下似乎都工作得很好:
SELECT IDBRANCH, ENDNODEIDCONTENT, IDCATEGORY, IDPARENTCATEGORY, TAXYJ.IDCONTENT, TCT.CONTENTNAME AS ENDNODECONTENTNAME, CATEGORYNAME, LVL
FROM (
SELECT CONNECT_BY_ROOT TAXY.IDCATEGORY AS IDBRANCH
, CONNECT_BY_ROOT TAXY.IDCONTENT AS ENDNODEIDCONTENT
, TAXY.IDCATEGORY
, TAXY.IDPARENTCATEGORY
, TAXY.IDCONTENT
, TAXY.CATEGORYNAME
, LEVEL AS LVL
FROM TAXONOMY TAXY
CONNECT BY TAXY.IDCATEGORY = PRIOR TAXY.IDPARENTCATEGORY
) TAXYJ
LEFT OUTER JOIN CONTENT TCT ON TCT.IDCONTENT = TAXYJ.ENDNODEIDCONTENT