2012-09-14 72 views
4

我有java包名称的表中的值:检查一列的值包含的另一个

|id|pkg| 
|1 |some.long.package.path| 
|2 |com.admob.bla| 

,并包含名称在已知的广告框架部分包的表。

|id|path_fragment| 
|1 |.admob | 

如何检索pkg的值包含ad_frameworks.path_fragment的任何包的包?

我只是找不到子字符串检查。我发现所有人都喜欢与某些字符串进行比较,但从不用于比较列。

注:我正在使用MySQL。

+0

检查我的回答可以below..it使用'concat'和'like' –

回答

13

认为你可以做一个像

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 

好吧,你有几种选择;)

SqlFiddle

+0

那不是给我来解决只有那些whoe PKG _ends_与adf.path_fragment? – er4z0r

+0

使用LOCATE或POSITION函数也可能在MySQL – er4z0r

+0

@ er4z0r语法错误中起作用...检查更正的答案 –

1

试试这个,

SELECT a.*, b.* 
FROM package a, ad_frameworks b 
WHERE a.pkg LIKE CONCAT('%',b.path_fragment,'%') 

SQLFiddle Demo

0

尝试类似的东西:

SELECT distinct a.pkg FROM TAB_1 as a INNER JOIN TAB_2 as b ON a.pkg LIKE CONCAT('%', b.path_fragment, '%') 
0

你可以做这样的事情:

select p.id, pkg from packages p 
inner join frameworks f on 
p.pkg like concat('%',f.path_fragment,'%') 
相关问题