2

文字列のテーブルがあり、事前定義されたリストの少なくとも 2 文字を含むすべての行を取得したいと考えています。例でよりよく説明します:

私のテーブルは次のようになります。

Id|Word
 1|Cat
 2|Chicken
 3|Dog
 4|Elephant
 5|Fish
 6|Goat

これは私の文字リストである可能性があります:

Characterlist = 'A', 'B', 'C', 'E'

select ステートメントは次を返す必要があります: Cat, Chicken, Elephant

mySQL ドキュメントの文字列関数を調べましたが、これを行うのに適した関数が見つかりません。それは可能ですか?

4

1 に答える 1

4

これは、ブール条件によって返される0または1を合計することに依存する非効率的な方法です。

SELECT
  *,
  (
    (UPPER(Word) LIKE '%A%') +
    (UPPER(Word) LIKE '%B%') + 
    (UPPER(Word) LIKE '%C%') + 
    (UPPER(Word) LIKE '%D%') 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2

条件はLIKEそれぞれ0または1を返します。これらは合計され、HAVING句は結果を2以上のスコアの行に制限します。

LOCATE()代わりに使用する方が速いかもしれませんLIKE

SELECT
  *,
  (
    (LOCATE('A', UPPER(Word)) > 0) +
    (LOCATE('B', UPPER(Word)) > 0) + 
    (LOCATE('C', UPPER(Word)) > 0) + 
    (LOCATE('D', UPPER(Word)) > 0) 
  ) AS lettermatches
FROM yourtable
HAVING lettermatches >= 2
于 2012-07-24T11:33:51.360 に答える