Oracle SQL-如果满足该行的条件,则从第二个表添加列

时间:2020-05-24 21:08:33

标签: sql oracle csv join select

如果表1中的A列和B列与A列和B列相匹配的表2行,我想从表2中引入C列。

表1

Column A         Column B
ABC123           XX470000

表2

Column A            Column  B              Column  C
ABC123,EFG123       XX470000,XX560000      Winner

查询:

Select * From
(
Select * From Table 1 
) T1.
(
Select * From Table 2 
) T2.

where T1.ColumnA in s2.ColumnA 
and T1.ColumnB in s2.ColumnB 
;

我尝试使用“ like”,“ in”和“ =”语句来匹配不同的表。 我也需要成千上万的行。

2 个答案:

答案 0 :(得分:0)

如果要检查csv列表中每个值的存在,则可以使用以下加入条件:

select t1.*, t2.columnC
from table1 t1
inner join table2 t2 
    on  ',' || t2.columna || ',' like '%,' || t1.columna || ',%' 
    and ',' || t2.columnb || ',' like '%,' || t1.columnb || ',%' 

但是,您应该真正修复架构,并将csv字符串的每个值存储在单独的表行中(可能使用桥表)。在表中存储定界值以某种方式破坏了关系数据库的目的。推荐的相关读物:Is storing a delimited list in a database column really that bad?

答案 1 :(得分:0)

一个选项是在一个 对REGEXP_SUBSTR()进行SELECT .. FROM .. CONNECT BY level <= ...类型的查询以拆分'[^,]+'ColumnA的值转换为以逗号分隔的子字符串,然后在匹配条件下与其他表的Table2值结合,以获取这些子字符串的精确匹配:

ColumnA

Demo