Концепция иерархии таблиц

#sql #oracle

Вопрос:

 WITH T AS (
           SELECT  /*  MATERIALIZE */
                   C1.OWNER,
                   C1.TABLE_NAME,
                   C1.CONSTRAINT_NAME,
                   C1.CONSTRAINT_TYPE,
                   C1.STATUS,
                   C2.OWNER PARENT_OWNER,
                   C2.TABLE_NAME PARENT_TABLE_NAME,
                   C2.CONSTRAINT_NAME PARENT_CONSTRAINT_NAME,
                   C2.CONSTRAINT_TYPE PARENT_CONSTRAINT_TYPE,
                   COUNT(CASE C1.CONSTRAINT_TYPE WHEN 'R' THEN 1 END) OVER(PARTITION BY C1.OWNER,C1.TABLE_NAME) TABLE_HAS_FK
             FROM  DBA_CONSTRAINTS C1,
                   DBA_CONSTRAINTS C2
             WHERE C1.CONSTRAINT_TYPE IN ('P','U','R')
               AND C2.OWNER( ) = C1.R_OWNER
               AND C2.CONSTRAINT_NAME( ) = C1.R_CONSTRAINT_NAME
               AND C1.OWNER = 'SCOTT'
               AND C1.TABLE_NAME IN ('PARENT','CHILD','GRANDCHILD')
          )
SELECT  LEVEL,
        OWNER,
        TABLE_NAME
  FROM  T
  START WITH CONSTRAINT_TYPE IN ('P','U')
         AND TABLE_HAS_FK = 0
  CONNECT BY PARENT_OWNER = PRIOR OWNER
         AND PARENT_TABLE_NAME = PRIOR TABLE_NAME
         AND CONSTRAINT_TYPE = 'R'
/

 LEVEL OWNER     TABLE_NAME
------ --------- ----------
     1 SCOTT     PARENT
     2 SCOTT     CHILD
     3 SCOTT     GRANDCHILD
 

Я использовал тот же запрос, но вместо этого для имен таблиц —(родитель, ребенок, внук) Я взял

(выберите t_name из таблицы конфигураций, где is_active =1) в соответствии с требованием, содержащим 90 таблиц.

Но когда я использую самый верхний длинный запрос, он выдает мне 911 записей таблицы. Не могли бы вы, пожалуйста, объяснить мне причину?

Комментарии:

1. Примеры таблиц и данных очень помогли бы.