Oracle匹配来自2个表

时间:2017-09-27 18:47:32

标签: sql oracle compare inner-join

我有2个表格,如下所示,我想根据“产品”一栏仅列出表2中的表1中的记录

如果每个ID的任何一行匹配,那么它必须包含在输出表中(匹配不必在一个顺序中)例如:PRD-B,PRD-C也可以匹配PRD-C, PRD-B但它必须是一场完整的比赛。

我将无法对我的数据模型进行任何更改

表1

 ID   |   State      |     Product     |
 ---------------------------------------
 1         FL                PRD-A
 1         GA                PRD-B
 1         CA                PRD-D,PRD-E
 2         MN                PRD-K
 3         OH                PRD-B,PRD-C
 4         PR                PRD-F,PRD-Z
 4         MT                PRD-Z,PRD-A

表2

 |  Product      |
----------------
 PRD-A
 PRD-C,PRD-B
 PRD-F
 PRD-A,PRD-Z

这是必需的输出

表3

ID       |      State     |      Product    |
-----------------------------------------------
 1               FL              PRD-A
 1               GA              PRD-B
 1               CA              PRD-D,PRD-E   
 3               OH              PRD-B,PRD-C
 4               MT              PRD-Z,PRD-A

我试图使用联接,但没有找到完整匹配的运气,任何想法或帮助表示赞赏。

修改

select distinct a.ID
  from Table_1 a
  inner join Table_2 b
    on trim(upper(b.Product)) = trim(upper(Product))

这是我的查询的一部分

1 个答案:

答案 0 :(得分:0)

    with tbl1 as (
    select distinct a.id, a.state trim(regexp_substr(trim(upper(b.Product)),'[^,]+', 1, level) ) product
      from table_1 a
       connect by regexp_substr(trim(upper(a.Product)) , '[^,]+', 1, level) is not null
       order by id),
    tbl2 as (
    select distinct trim(regexp_substr(trim(upper(b.Product)),'[^,]+', 1, level) ) product
      from table_2 b
       connect by regexp_substr(trim(upper(b.Product)), '[^,]+', 1, level) is not null)
select distinct tbl1.*
  from tbl1
  inner join tbl2
    on tbl1.product = tbl2.product