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