繁体   English   中英

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

[英]Join two tables and return a column value multiple times in 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记录。

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

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

使用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_NAMEtable_B获得另一个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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM