ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ с 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

и хочу добавить к каждой записи CONTENTNAME столбец из таблицы 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 дополнительный столбец: 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)

Самое странное, что запрос вчера работал на БД разработки, как и ожидалось, а сейчас - нет. Поэтому я создал скрипку, чтобы проверить, смогу ли я воспроизвести предыдущие результаты, и она отлично работает... http://sqlfiddle.com/ http://sqlfiddle.com/

Что могло вызвать это изменение поведения?

1 ответ

Решение

Я все еще не знаю, что произошло (все еще не работает), но это решение, кажется, работает хорошо в обоих случаях:

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/

Другие вопросы по тегам