我有2张桌子
Table 1:
#######
ID Location
1 India
2 Australia
Table 2:
############
Name Locations
test1 India|North America
test2 Indiana|Australia
我使用以下查询从表2中获取名称,如果它包含表2的位置中的位置。
select Name
from table2 t2 inner join table1 t1
on instr(t1.Location,t2.Locations,length(t1.Location)) >= 1;
但是当它被执行时它仍然给了我印第安纳州的结果,而它应该只返回我的位置印度的结果。
我也尝试在查询中使用contains,但是包含第二个参数作为字符串但不作为列名。
还有其他方法吗?
答案 0 :(得分:1)
regexps在这种情况下总能提供帮助
with
table1 (id, location) as (
select 1, 'India' from dual union
select 2, 'Australia' from dual
),
table2 (name, locations) as (
select 'test1', 'India|North America' from dual union
select 'test2', 'Indiana|Australia' from dual
)
select *
from table2 join table1 on
regexp_like (locations, '(^|\|)' || location || '(\||$)')
答案 1 :(得分:0)
尝试使用分隔符查找位置,如下所示:
select Name from table2 t2
inner join table1 t1 on instr(t2.Locations,t1.Location||'|') >= 1