2

「1,2,5,10」のようなテキスト列にIDセットがある不適切に投影されたデータベースがあります。同じ方法で設定された2つの列の共通部分を取得する必要があります。PHPや他のスクリプト言語を使用してそれを行うのは好きではありません。また、MySQLカスタム関数も好きではありません。コンマ区切り文字列で指定された2つのセットの共通部分を取得する方法はありますか?

実際、完全交叉である必要はありません。2つのセットに同じ番号があることを知っておく必要があります。はいの場合は「1」、同じ番号がない場合は「0」が必要です。

ありがとうございました。

4

2 に答える 2

3

REGEXP少し賢い交換でこれを行うために使用できるかもしれません。

これでうまくいくと思います(免責事項:広範囲にテストしていません):

SELECT col1,
       col2,
       CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS regex,
       col1 REGEXP CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS intersect
FROM tbl

http://sqlfiddle.com/#!2/7b86f/3を参照してください

説明:これcol2は、と照合するための正規表現に変換されcol1ます。ビットは(\,|$)、コンマまたは文字列の終わりのいずれかと一致します。お役に立てれば...

于 2012-09-07T13:20:03.787 に答える
0

Steveのコードは、すべての場合に機能するわけではありません。たとえば、ある番号が別の番号にある場合は機能しません。INSERT INTO tbl(col1、col2)VALUES('60、61,64,68,73'、' 14,16,17,18,1'); 少し調整するだけで機能します。

SELECT col1,
col2,
CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS regex,
CONCAT(',',col1,',') REGEXP CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS intersect
FROM tbl
于 2014-02-05T19:33:38.163 に答える