如果表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”和“ =”语句来匹配不同的表。 我也需要成千上万的行。
答案 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