3

私はこのクエリを持っています:

SELECT * FROM mytable
WHERE column1 LIKE '%word1%'
AND column1 LIKE '%word2%'
AND column1 LIKE '%word3%'

column1 に word1 word2 と word3 が含まれ、他には何も含まれていないレコードを返すように、このクエリを変更する必要があります。他の言葉はありません、これらの言葉だけです。

例: を検索すると、ただし NOTsamsung galaxy s3の任意の組み合わせが返されますsamsung s3 galaxysamsung galaxy s3 lte

4

3 に答える 3

4

スペースで区切られた単語が含まれていると仮定し、次のような単語全体column1でのみ一致させたいとします。

SELECT * FROM
  (select ' ' + REPLACE(column1,' ','  ') + ' ' as column1 from mytable) t
WHERE
   column1 like '% word1 %' AND
   column1 like '% word2 %' AND
   column1 like '% word3 %' AND
   REPLACE(REPLACE(REPLACE(column1,
      ' word1 ',''),
      ' word2 ',''),
      ' word3 ','') = ''

この構造では、同じ単語を複数回使用できることに注意してください。それが許されるべきかどうかは、質問からは明らかではありません。(フィドル)


これらの単語が に関連する別のテーブルに別の行として格納されていると、はるかに優れた設計になりmytableます。次に、このクエリを満たすために、より通常の SQL を使用できます。あなたの例は、ある種のタグ付けの例のようです。各タグを個別の行 (必要に応じて順序位置も記録) として格納するテーブルを作成すると、これは単純な関係分割の問題になります。


単語が列に表示される回数を数える方法は、次の式です。

(LEN(column2) - LEN(REPLACE(column2,'word',''))/LEN('word')

しかし、これは、単語自体だけでなく、より大きな単語の部分シーケンスの一致にもどります。これ以上の作業は必要ありません。

于 2013-01-12T07:01:11.733 に答える
0

これを試して

SELECT * FROM mytable
WHERE column1 LIKE 'word1'
AND column1 LIKE 'word2'
AND column1 LIKE 'word3'
于 2013-01-12T06:56:41.213 に答える
0

正規表現を次のようにMySQL使用できます

SELECT * FROM mytable
WHERE column1 regexp '^word[1-3]$';

' ' キーワードをpostgres使用できますsimilar to

オラクルにもあると思いますregexp

于 2013-01-12T07:15:48.220 に答える