0

我有

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

并希望CONTENTNAME从 table 添加到每个条目列CONTENT

我试过了:

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 个额外的列:CONTENTNAMEfrom CONTENT,关联 by IDCONTENT; NULL如果没有关联的内容(IDCONTENTNULL)应该是

相反,我只得到IDCONTENTis not的行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

最奇怪的是,查询昨天在开发数据库上按预期工作,但现在不是。所以我创建了一个小提琴来检查我是否可以重现以前的结果并且它工作正常...... http://sqlfiddle.com/#!4/ecb9d/1 http://sqlfiddle.com/#!4/ecb9d /3

是什么导致了这种行为变化?

4

1 回答 1

0

我仍然不知道发生了什么(仍然无法正常工作),但这个解决方案似乎在两种情况下都可以正常工作:

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

http://sqlfiddle.com/#!4/ecb9d/4

于 2015-01-14T15:16:45.553 回答