Используйте выражение коллекции таблиц для обработки коллекции во вложенной таблице, как если бы она была таблицей, и присоединитесь к ней.Затем можно выполнить фильтрацию, чтобы получить по одной строке на user_id
:
Скрипка SQL
Настройка схемы Oracle 11g R2 :
create type t_tel as table of number;
create table users_tel(
user_id number,
user_name varchar2(100),
tel t_tel
) nested table tel store as tel_table;
insert into users_tel(user_id, user_name, tel)
SELECT 1, 'Amir', t_tel(987,654,321) FROM DUAL UNION ALL
SELECT 2, 'Dave', t_tel(123,456) FROM DUAL UNION ALL
SELECT 3, 'Kevin', t_tel() FROM DUAL;
Запрос 1 :
SELECT user_id,
user_name,
tel_no
FROM (
SELECT u.*,
t.column_value AS tel_no,
ROW_NUMBER() OVER ( PARTITION BY u.user_id ORDER BY ROWNUM ) AS rn
FROM users_tel u
LEFT OUTER JOIN
TABLE( u.tel ) t
ON ( 1 = 1 )
)
WHERE rn = 1
Результаты :
| USER_ID | USER_NAME | TEL_NO |
|---------|-----------|--------|
| 1 | Amir | 987 |
| 2 | Dave | 123 |
| 3 | Kevin | (null) |