Может быть, я ошибаюсь, но - это выглядит как обычное соединение. Смотрите пример:
with
-- sample data
orders (id, name) as
(select 1, 'Order 1' from dual union all
select 2, 'Order 2' from dual
),
products (id, name) as
(select 200, 'apple' from dual union all
select 201, 'orange' from dual union all
select 202, 'car' from dual union all
select 203, 'airplane' from dual
),
orderedproducts (orders_id, products_id) as
(select 1, 202 from dual union all
select 2, 201 from dual union all
select 2, 202 from dual union all
select 2, 203 from dual
)
-- query you need (I think)
select o.id oid, o.name oname, p.id, p.name
from orders o join orderedproducts op on op.orders_id = o.id
join products p on p.id = op.products_id
where
-- get everything for order ID = 2
o.id = 2
order by o.id, p.id;
ID NAME ID NAME
---------- ------- ---------- --------
2 Order 2 201 orange
2 Order 2 202 car
2 Order 2 203 airplane
Если это не это , не могли бы вы опубликовать то, что вы действительно ожидаете от него? Вы знаете - желаемый результат?
Если вы хотите пропустить повторение значений из таблицы orders
, это зависит от используемого вами инструмента. В SQL* Plus вы можете BREAK
в этих столбцах, например,
SQL> break on oid on oname
SQL>
SQL> with
2 -- sample data
3 orders (id, name) as
4 (select 1, 'Order 1' from dual union all
<snip>
23 where
24 -- get everything for order ID = 2
25 o.id = 2
26 order by o.id, p.id;
OID ONAME ID NAME
---------- ------- ---------- --------
2 Order 2 201 orange
202 car
203 airplane
SQL>
Или, если вы используете какой-либо инструмент отчетности (например, Oracle Построитель отчетов или даже Apex Interactive или Classi) c отчетов), у них также есть такая возможность.
Если это все еще не "это", PL / SQL вариант для вас? Некоторые называют это «хранимыми процедурами» (хотя это не совсем то, что есть, но «процедуру» легче понять, чем «PL / SQL»). Там у вас есть разные варианты, такие как курсоры и циклы.