【问题标题】:Join two tables and return a column value multiple times in Oracle在Oracle中连接两个表并多次返回一个列值
【发布时间】:2019-05-22 11:55:30
【问题描述】:

我有两个表 - 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 记录。

【问题讨论】:

  • 为什么要使用TABLE_B?只需使用SELECT 'USA' as Name
  • 同意,但这是现有的结构

标签: sql oracle


【解决方案1】:

这似乎是你想要的:

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

【讨论】:

    【解决方案2】:

    这样的?

    如果您在第 15 行更改条件,您将从 table_B 获得另一个 LOC_NAME

    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>
    

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 2013-02-18
        • 2020-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        相关资源
        最近更新 更多