Соедините две таблицы и несколько раз возвращайте значение столбца в Oracle

У меня есть две таблицы - 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.

Зачем вообще использовать TABLE_B? Просто используйте SELECT 'USA' as Name.

Gordon Linoff 22.05.2019 13:58

Согласен, но это структура, которая существует

tonyf 22.05.2019 14:09
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте 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

Demo

Что-то вроде этого?

Если вы измените условие в строке № 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.

Другие вопросы по теме