оракул 9i получает самого высокого члена дерева с данным ребенком

Когда кодер не знает, что Вы считаете строки кода, и также - никакая причина сознательно добавить избыточный код для игр системы. И когда у всех в команде есть подобный стиль кодирования (таким образом, существует известное среднее "значение" на строку.) И только если Вы не имеете лучшую меру в наличии.

5
задан OMG Ponies 18 September 2009 в 14:25
поделиться

2 ответа

вы можете использовать запрос CONNECT BY для создания списка родителей, а затем отфильтровать:

SQL> WITH tree AS (
  2     SELECT 1 parent_id, 2 child_id FROM DUAL
  3     UNION ALL SELECT 2   , 3  FROM DUAL
  4     UNION ALL SELECT 2   , 4  FROM DUAL
  5     UNION ALL SELECT null, 1  FROM DUAL
  6     UNION ALL SELECT 1   , 8  FROM DUAL
  7  )
  8  SELECT child_id
  9    FROM (SELECT *
 10            FROM tree
 11          CONNECT BY PRIOR parent_id = child_id
 12           START WITH child_id = 4)
 13   WHERE parent_id IS NULL;

  CHILD_ID
----------
         1
4
ответ дан 15 December 2019 в 01:06
поделиться
SELECT  parent
FROM    (
        SELECT  parent
        FROM    (
                SELECT  parent, level AS l
                FROM    mytable
                START WITH
                        child = 4
                CONNECT BY
                        child = PRIOR parent
                )
        ORDER BY
                l DESC
        )
WHERE   rownum = 1

Это даст вам NULL в качестве абсолютного родителя.

Если вы хотите 1 , замените родительский на child :

SELECT  child
FROM    (
        SELECT  child
        FROM    (
                SELECT  child, level AS l
                FROM    mytable
                START WITH
                        child = 4
                CONNECT BY
                        child = PRIOR parent
                )
        ORDER BY
                l DESC
        )
WHERE   rownum = 1
0
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: