连接两个表并在Oracle中多次返回一个列值

时间:2019-05-22 11:55:31

标签: sql 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中的所有记录,并使用LOC_ID在TABLE_B上联接,但要从TABLE_B返回USA以获得TABLE_A中的所有AREA_ID。

我追求的结果是:

结果:

AREA_ID  NAME
------   --------
111      USA
222      USA
333      USA

也就是说,我想针对LOC_ID = 1(美国)在TABLE_B中重复LOC_NAME,并将此名称分配给TABLE_A中的所有AREA_ID记录。

3 个答案:

答案 0 :(得分:3)

这似乎可以满足您的要求:

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值。

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

像这样吗?

如果您在第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>