2

このような2つの列を含むテーブルがあります。(商品名&商品説明)

item_name    item_des

jasmine      beautiful flower & nice smell    
rose         flower
orange       gud fruit
apple        fruit
books        books

アイテム名と説明に基づいて、このテーブルから一致するアイテムを見つけたいと思います。たとえば、結果は次のようになります。

item_name    item_des

jasmine      beautiful flower & nice smell    
rose         flower

また

item_name    item_des

orange       gud fruit
apple        fruit

どうすればSQLでそれを行うことができますか?

アイテム名や説明はありません。同様のアイテム名または同様の説明を持つテーブルのすべての内容を取得したいだけです。

4

3 に答える 3

1

他の回答に関するコメントを読んだ後、テーブルから行のセットを取得する必要があり、各セットの item_des 列に同様の値を設定する必要があるという結論に達しました。少なくともそれがあなたの例が示すものです。

問題は、「類似」を定義する方法にあります。私が理解している限り、探している類似性の種類を定義するためにクエリに追加のデータを提供したくないと考えています。AshReva と Naryl は、あなたがそうだと思っていました。そのため、クエリで使用することを提案していLIKE '%flower%' or LIKE 'fruit'ます。

あなたが求めているのは、 list('fruit', 'flower', ...)を持っていないので、 list を取得する方法だと思います。あなたはあなたのためにそれを見つけるクエリが欲しいです。

それは簡単な作業ではなく、あなたの側で決定を下す必要があります。タスクはかなり複雑なので、すぐに実行できるソリューションを提供するつもりはありません。実行する必要があるいくつかの非常に簡単な手順を紹介します。

まず、item_des フィールドをトークン化する必要があります。必要なのは、トークンと呼ばれる 1 つのフィールドを持つ t と呼ばれる別のテーブルです。例をトークン化した後、次のようなテーブルを取得する必要があります。

token
fruit
books
beautiful
flower
&
nice
smell
gud
fruit
flower

おそらく、独自のトークン化関数を作成する必要があります。ここをチェックしてください: mySql の split() メソッドに類似したものはありますか?

次に、重複を削除します (distinct列に対して a を実行します)。だからあなたは得る:トークンフルーツブック美しい花といい香りのガッド

次に、何らかの形で無効なトークンを削除したい場合があります。これは手動で行うことができます。一連のキーワードまたは辞書に対して自動照合を行う場合があります。たとえば、長さが 1 文字のトークンを削除するなど、何らかのヒューリスティックを適用できます。

その後、2 つのテーブル、元のテーブル (input_data と呼ぶことにしましょう) と、トークンを含む最終的なテーブル t の間で単純に照合を行います。

select item_name, item_des, token
from input_data, t
where item_des like concat('%',t.token,'%')
order by token

次に、次のようなものを取得する必要があります。

item_name    item_des                         token
jasmine      beautiful flower & nice smell    beautiful
jasmine      beautiful flower & nice smell    &
jasmine      beautiful flower & nice smell    nice
jasmine      beautiful flower & nice smell    smell
rose         flower                           flower
jasmine      beautiful flower & nice smell    flower
orange       gud fruit                        gud
orange       gud fruit                        fruit
apple        fruit                            fruit
books        books                            books

これがあなたが必要としていたものであることを願っています。

于 2013-03-10T10:56:47.863 に答える
-2

以下のコードを試してください:

select * from table_name where item_name like '%flower%' or item_des like '%flower%'
于 2013-03-06T11:55:01.253 に答える
-3

次の方法で実行できます。

SELECT * FROM item WHERE item_des LIKE '%flower%'
于 2013-03-06T11:54:02.093 に答える