2009-06-26 6 views
1

私はテーブル製品を持っていますが、カラムの1つは関連製品です。関連商品には、コロンで区切られた連結商品IDの文字列(カラムproductid)が含まれています。 abc-123:foo-prod:ada69など。いくつかの悪い設計のため、製品が製品表から削除され、関連製品列に参照される場合があります。MySQLは正規表現に基づいて結合します

私はproductsテーブル内のすべての行を調べ、データを爆発させてrelatedproducts列をチェックして、参照された各製品が同じ製品テーブルに存在するかどうかを調べる必要があります。しかし、私はsqlの初心者であり、これを行うためにjoin/regexpクエリを書くのに問題があります。

ご協力いただければ幸いです!

+2

をなぜあなたはrelatedproductsで文字列を連結しているのですか?共通の関連商品IDの下にそれぞれの関連商品を個別にリストした場合、管理が簡単になります。 –

答えて

3

MySQLregexpと一致しますが、残念ながら一致する部分文字列を返すことはできません。

あなたはより良いFIND_IN_SETを使用してそれを実行します。

SELECT * 
FROM products p 
JOIN product rel 
ON  FIND_IN_SET(rel.id, REPLACE(p.related, ':', ',')) 
関連する問題