5

Java パッケージ名の表があります。

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

部分的なパッケージ名を含むテーブルは、既知の広告フレームワークを形成します。

|id|path_fragment|
|1 |.admob |

pkg の値に ad_frameworks.path_fragment のいずれかが含まれているパッケージを取得するにはどうすればよいですか?

部分文字列チェックが見つかりません。私が見つけたのは、 like を使用して文字列リテラルと比較するが、列を比較することは決してない人だけです。

注: MySQL を使用しています。

4

4 に答える 4

17

likeで内部結合を行うことができると思います

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

于 2012-09-14T12:43:48.257 に答える
2

これを試して、

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

SQLFiddle デモ

于 2012-09-14T12:49:35.680 に答える
0

そのようなことを試してください:

SELECT distinct a.pkg FROM TAB_1 as a INNER JOIN TAB_2 as b ON a.pkg LIKE CONCAT('%', b.path_fragment, '%')
于 2012-09-14T12:50:52.153 に答える
0

次のようなことができます。

select p.id, pkg from packages p
inner join frameworks f on 
p.pkg like concat('%',f.path_fragment,'%')
于 2012-09-14T12:50:53.243 に答える