Соедините две таблицы и несколько раз верните значение столбца в Oracle - PullRequest
0 голосов
/ 22 мая 2019

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

Ответы [ 3 ]

3 голосов
/ 22 мая 2019

Это похоже на то, что вы хотите:

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 значение.

0 голосов
/ 22 мая 2019

Как то так?

Если вы измените условие в строке # 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>
0 голосов
/ 22 мая 2019

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

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...