Member 12613458 Ответов: 1

Как получить все компании под одной компанией, если присутствует много филиалов - DB2


G007 AFFILATES HOULD RETURN ALL DIRECT SUB AND SUB TO SUB LEVEL AFFILIATES.
CAN BE TO NTH LEVEL

HOW TO QUERY in DB2?


AREVA_COMPANIES
---------------------------
COMPANY_CODE|AFFILIATE_CODE
G007        |K001
G007        |K002
G007        |K003
G007        |K004
K001        |K010
K001        |K011
K001        |K012
K002        |K020
K002        |K031
K004        |K067


Что я уже пробовал:

WITH ALL_AFFILIATES(COMPANY_CODE,AFFILIATE_CODE) AS
(
 SELECT COMPANY_CODE, AFFILIATE_CODE
 FROM   AREVA_COMPANIES
 WHERE  COMPANY_CODE = 'G007'
 UNION ALL
 SELECT B.COMPANY_CODE, B.AFFILIATE_CODE
 FROM   AREVA_COMPANIES B , ALL_AFFILIATES A
 WHERE  B.COMPANY_CODE = A.AFFILIATE_CODE
)
SELECT COMPANY_CODE, AFFILIATE_CODE
FROM ALL_AFFILIATES

Patrice T

В чем проблема с вашим запросом ?

Member 12613458

Получение ошибки ожидания в DB2
DB2 "00C90084", тип ресурса: "00000100" и имя ресурса: "DSNDB07". SQLSTATE=57011

Там есть ряд
AREVA_COMPANIES
---------------------------
COMPANY_CODE|AFFILIATE_CODE
G007 |G007

Может быть, причина в этом? Пожалуйста помочь.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

1 Ответов

Рейтинг:
1

CHill60

Хотя UNION будет работать так, как вы продемонстрировали в своем запросе, он не расширяется до n-го уровня.

По сути, вам нужно пересечь иерархию - я привел здесь пример - Циклы обработки в SQL Server[^]

В этом примере используется T-SQL, которому в значительной степени следует DB2. Прошло уже много времени с тех пор, как я использовал DB2, но он поддерживает рекурсивные CTE - см. CTE - IBM Knowledge Center[^] и Как выполнить рекурсивный запрос - IBM Knowledge Center[^]