(Примечание: данные здесь являются вымышленным примером, поскольку я не могу опубликовать реальные данные. Бесполезно утверждать, что структура таблицы не имеет смысла или должна измениться)
База данных - Oracle 10g.
Дано:
Products
------------
ID
Price
Sample Data:
ID Product_ID Customer Quantity
-------------------------
1 30 2 10
2 40 2 15
3 50 5 7
4 60 5 9
Product_types
-----------
ID
Name
Parent
Type
Data
ID Product_ID Name Parent
----------------------------------
1 10 Box
2 20 Toolbox 10
3 30 Hammer 20
4 40 Nail 30
Запрос:
select * from (select * from Product_types t
START WITH t.Parent = 20
CONNECT BY PRIOR t.Product_ID = t.PARENT) t_result
left join Products p on T_RESULT.Product_ID = P.Product_ID
where P.Customer = 2;
Токовый выход:
Product_ID Name Parent Product_ID_1 Customer Quantity
-------------------------------------------------------------------
30 Hammer 20 30 2 10
40 Nail 30 40 2 15
Желаемый вывод:
Product_ID Name Parent Product_ID_1 Customer Quantity
---------------------------------------------------------------------
20 Toolbox 10
30 Hammer 20 30 2 10
40 Nail 30 40 2 15
Я понимаю, что это только выбор строк с customer = 2 из-за моего предложения where.Тем не менее, мне интересно, есть ли способ достичь вершины иерархии.Моей первой мыслью было, что левое соединение должно по-прежнему предоставлять строку Toolbox с NULL-клиентом, но эта строка не включена.Я также попытался выполнить полное внешнее объединение.
Я подозреваю, что мне может потребоваться выполнить два запроса и объединить результаты вручную, чтобы получить желаемый результат, но сначала я хотел проконсультироваться с некоторыми экспертами.
Может кто-нибудь придумать способ получить желаемый результат?