prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category
は、とにかくあなたが
EDIT
にこの問題に直面する別の方法をカテゴリテーブルおよび製品上のそれへの参照を追加して、スキーマをリファクタリングすることをお勧めしていた(メイン)テーブルですREGEXPを使用すると、短いWHERE
句につながるであろう(ここで私がテストするために使用してきたものです):
DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';
SELECT
'1,11,15,51,22,31' REGEXP @regexp AS test1,
'51,11,15,1,22,31' REGEXP @regexp AS test2,
'11,15,51,22,31,1' REGEXP @regexp AS test3,
'7,11,15,51,22,31' REGEXP @regexp AS test4,
'51,11,15,7,22,31' REGEXP @regexp AS test5,
'11,15,51,22,31,7' REGEXP @regexp AS test6;
これはあなたのprod_catg
と、正規表現'^1,.*|.*,1$|.*,1,.*'
と一致します。一致する場合は0 (FALSE)
となります。returnig 1 (TRUE)
は、その後、あなたの句は次のようになりますWHERE:正規表現の
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
説明:
^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$ --matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator
私はこの正規表現は、はるかにコンパクトにすることができ確信しているが、私は定期的に良いことではありませんよ式
また、正規表現で探しているカテゴリを変更することもできます(1
を7
に置き換えてください)上のファイル)
あなたはscemaをテーブル 'category'を追加して正規化してから、それをメインテーブルで参照するべきです – Dalen