2015-09-14 3 views
0

Моя проблема в этом. Я обращаюсь к плохо разработанной системе инвентаризации оборудования, и то, что у нее есть, - это несколько уровней оборудования в одной таблице.SQL-запрос для нескольких уровней в одной таблице

Для примера:

Таблица: Оборудование

|EQ_1 | EQ_2| 
|123 |  | 
|123 | 456 | 
|123 | 567 | 
|456 | 789 | 
|567 |  | 
|789 | 987 | 

Как вы можете увидеть первую часть оборудования имеет одну запись для себя 123, и еще две записи для единиц оборудования, подключенных к нему 456 и 567 Отсюда 567 только сам, но 456 прикреплен к 789, и это дополнительно присоединено к 987.

Я несколько раз присоединился к столу, но я продолжаю работать в оборудовании с более глубокими соединениями, чем я компенсирую. То, что я хотел бы найти, - это способ получить «конечные точки» независимо от того, насколько они глубоки.

Пример:

вход I 123 как часть оборудования, я хочу, чтобы увидеть все оборудование, и я получаю возвращение

123 
456 
567 
789 
987 

Я делаю этот запрос через PHP код, так что если есть предложения с использованием этого я открыт для него, но поскольку есть сотни тысяч подключений, я бы хотел предотвратить передачу информации с серверов Oracle на веб-сервер и создание нескольких запросов. Pure SQL будет первым выбором, второй шаг PHP/SQL, если вы не сможете показать, что он более эффективен.

+2

Проверьте это: http://stackoverflow.com/questions/2319284/sql-recursive-query-on-self- refrencing-table-oracle –

+0

Вам просто нужен отдельный набор значений, которые находятся в 'eq_1' или' eq_2'? Учитывая результат, который вам нужен, для меня не очевидно, что вам нужно вообще работать с этими связями. –

+0

В примере, который я использовал, есть только одно устройство, ссылки должны быть обработаны, потому что есть тысячи устройств «начальной точки», которые не связаны со всеми значениями – James

ответ

0

Из комментария Марка Б на вопрос, который я наткнулся на этот ответ на то, что мне нужно было

SELECT DISTINCT EQ_1 
       ,EQ_2 
       ,LEVEL 

FROM Equipment 
CONNECT BY PRIOR EQ_2 = EQ_1