У меня есть две таблицы - TABLE_A и TABLE_B.
TABLE_A
AREA_ID LOC_ID OTHER
------ -------- -----
111 1 AA
222 2 BB
333 3 CC
TABLE_B
-------
LOC_ID LOC_NAME
------- ----------
1 USA
2 ITALY
3 SPAIN
Основываясь на вышеизложенном, я хотел бы запросить все записи в TABLE_A и присоединиться к TABLE_B, используя LOC_ID, но вернуть USA из TABLE_B для всех AREA_ID в TABLE_A.
Результат, который мне нужен:
Результат:
AREA_ID NAME
------ --------
111 USA
222 USA
333 USA
То есть я хотел бы повторить LOC_NAME в TABLE_B для LOC_ID = 1 (США) и присвоить это имя всем записям AREA_ID в TABLE_A.
Согласен, но это структура, которая существует
Используйте cross join
как
select a.area_id, b.loc_name as name
from table_a a
cross join table_b b
where b.loc_id = 1
или inner join
как
select a.area_id, b.loc_name as name
from table_a a
join table_b b
on b.loc_id = 1
Что-то вроде этого?
Если вы измените условие в строке № 15, вы получите еще один LOC_NAME
из table_B
.
SQL> with table_a (area_id, loc_id, other) as
2 (select 111, 1, 'AA' from dual union all
3 select 222, 2, 'BB' from dual union all
4 select 333, 3, 'CC' from dual
5 ),
6 table_b (loc_id, loc_name) as
7 (select 1, 'USA' from dual union all
8 select 2, 'ITALY' from dual union all
9 select 3, 'SPAIN' from dual
10 )
11 select a.area_id, x.loc_name
12 from table_a a join
13 (select b.loc_name
14 from table_b b
15 where b.loc_id = 1 --> that's what you said
16 ) x
17 on 1 = 1;
AREA_ID LOC_N
---------- -----
111 USA
222 USA
333 USA
SQL>
Кажется, это делает то, что вы хотите:
select a.area_id, 'USA' as loc_name
from table_A a;
Я не могу понять, почему желательно присоединиться к table_B
.
Если вам действительно нужно значение с «1», используйте:
select a.area_id, b.loc_name
from table_A a join
table_B b
on b.loc_id = 1;
Возможно, вы захотите left join
. . . но тогда вы получите значение NULL
.
Зачем вообще использовать
TABLE_B
? Просто используйтеSELECT 'USA' as Name
.