0

列ID、メッセージを含むメッセージテーブルで特定の単語を検索しています

現在、フォームのケースを使用しています

select message_table.id, 
    case 
    when message_table.message like "%word1%" then 'word1'
    when message_table.message like "%word2%" then 'word2'
    when message_table.message like "%word3%" then 'word3'
    end as Filter
from message_table where Filter is not null

Message 列の行の値が ;word1,word2,word3; の場合。現在返されているのは 1 つだけです。

代わりにそれらすべてを持ちたいと思います。連結/グループ連結が役立つかもしれないと考えましたが、見つかった単語ごとに行を作成する方法がよくわかりません。

アドバイスをいただければ幸いです。

編集: 提供されているすべてのソリューションは見栄えがよく、すべてを試して、どれが最高のパフォーマンスを発揮するかを確認する必要があります。私の現在のクエリは、すでに必要以上に時間がかかっています。結果が少し返ってきます

Edit2:勝者の速度は(上記の私の場合よりもさらに高速です)。

select id, group_concat(word)
from
   (
   select id, 'word1' as Word from message_table where message like "%word1%" union
   select id, 'word2' from message_table where message like "%word2%" union
   select id, 'word3' from message_table where message like "%word3%" 
   ) alias
   group by 1

助けてくれてありがとう!

4

3 に答える 3