我有一个包含java包名的表:
|id|pkg|
|1 |some.long.package.path|
|2 |com.admob.bla|
和包含部分包名称的表格形成已知的广告框架。
|id|path_fragment|
|1 |.admob |
如何检索pkg值包含任何ad_frameworks.path_fragment的包?
我只是找不到子串检查。我找到的只是人们喜欢比较一些字符串文字但从不用于比较列。
注意:我使用的是MySQL。
答案 0 :(得分:15)
认为你可以用类似的
进行内部联接select p.id, p.pkg
from package p
inner join ad_frameworks adf on p.pkg like CONCAT('%', adf.path_fragment, '%')
--group by p.id, p.pkg
或当你指出
select *
from package p
inner join ad_frameworks adf on LOCATE(adf.fragment, p.pkg) > 0
或
select *
from package p
inner join ad_frameworks adf on INSTR( p.pkg,adf.fragment) > 0
或
select *
from package p
inner join ad_frameworks adf on POSITION(adf.fragment IN p.pkg) > 0
或
select *
from package p
inner join ad_frameworks adf on REPLACE(p.pkg, adf.fragemnt, '') <> p.pkg
嗯,你几乎没有选择;)
答案 1 :(得分:1)
试试这个,
SELECT a.*, b.*
FROM package a, ad_frameworks b
WHERE a.pkg LIKE CONCAT('%',b.path_fragment,'%')
答案 2 :(得分:0)
尝试类似的东西:
SELECT distinct a.pkg FROM TAB_1 as a INNER JOIN TAB_2 as b ON a.pkg LIKE CONCAT('%', b.path_fragment, '%')
答案 3 :(得分:0)
你可以这样做:
select p.id, pkg from packages p
inner join frameworks f on
p.pkg like concat('%',f.path_fragment,'%')