이 필요한 일을해야한다,이 시도는
with table_1 as
(select 10 as tb1_a, 'John' as tb1_b
from dual
union all
select 20 as tb1_a, 'John1' as tb1_b
from dual
union all
select 30 as tb1_a, 'John2' as tb1_b from dual),
table_2 as
(select 10 as tb2_a, 100 as tb2_b
from dual
union all
select 10 as tb2_a, 1000 as tb2_b
from dual
union all
select 10 as tb2_a, 10000 as tb2_b
from dual
union all
select 20 as tb2_a, 200 as tb2_b
from dual
union all
select 20 as tb2_a, 2000 as tb2_b
from dual
union all
select 20 as tb2_a, 20000 as tb2_b from dual),
table_3 as
(select 100 as tb3_a, 'City1' as tb3_b
from dual
union all
select 1000 as tb3_a, 'City10' as tb3_b
from dual
union all
select 10000 as tb3_a, 'City100' as tb3_b
from dual
union all
select 200 as tb3_a, 'City2' as tb3_b
from dual
union all
select 2000 as tb3_a, 'City20' as tb3_b
from dual
union all
select 20000 as tb3_a, 'City200' as tb3_b from dual)
select user_id, city
from (select u.tb1_a as user_id,
nvl(c.tb3_b, 'No city') as city,
rank() over(partition by u.tb1_a order by tb3_a) as city_rank
from table_1 u, table_2 u_c, table_3 c
where u.tb1_a = u_c.tb2_a(+)
and u_c.tb2_b = c.tb3_a(+)) t1
where city_rank = 1
자체를 설명 곳이 당신이 실제로'tb2_b'의 최대 값을 원하는 생각 생각 그런 다음 'tb3_a'에 참여하십시오. – ninesided
현재 시도 중에 실수가 있다고 생각합니다. tb2_a와 tb3_a를 비교합니다. tb2_b와 tb3_a를 비교해야합니다. –
@Walter - 내 말이 맞아요. – ninesided