Как в запросе выбрать запись из одной таблицы по признаку из другой?
Есть таблица RECORDS. На нее ссылается другая таблица ASSESSMENTпо FK столбец RECORD_ID на RECORDS.ID. Одной записи в RECORDS может соответствовать несколько записей в ASSESSMENT. В ASSESSMENT есть также столбец COLOR, который в свою очередь ссылается на таблицу DICTIONARY. В DICTIONARY каждому COLOR соответствует приоритет COLOR.priority.
Как я могу извлечь для заранее известного ID записи из таблицы RECORDS одну запись из ASSESMENT с наименьшим значением приоритета цвета?
Например: имеем запись в RECORD
create table records (id) as
select 1 from dual
, ей соответствуют две записи в ASSESMENT:
create table assessment (id, record_id, color) as
select 1, 1, 'red' from dual union all
select 2, 1, 'blue ' from dual
, а в таблице DICTIONARY дано:
create table dictionary (color, priority) as
select 'red', 1 from dual union all
select 'blue', 2 from dual union all
select 'green', 3 from dual
Нужно получить только запись с наименьшим значением приоритета, то есть у которой RECORD_ID = 1, COLOR='red'
Эту запись потом нужно будет соединить с другими, то есть обернуть это все в JOIN.
Ответы (1 шт):
select r.id, a.color
from records r
cross apply (
select max (a.color) keep (dense_rank first order by prio) color
from assessment a, dictionary d
where a.record_id = r.id
and d.color = a.color ) a;
ID COLOR
---------- -----
1 red
С тестовыми данными на db<>fiddle. Для версий 11g и старше.