0

SQL GUIツール「SQLite Database Browser 2.0 b1」の「SQL実行」機能を使用しています。

私が直面している問題がブラウザ内のバグによるものなのか、SQL が間違っているだけなのかはわかりません。Browser ツール内でいくつかのバグを発見したことは知っています。

とにかく。これが私が現在扱っている問題です...

データベースに 2 つのテーブルがあります。

TOYS
------------------------------
TOY_ID   TOY_DESC
------------------------------
1         Green truck, plastic
2         Doll, plastic, wood
3         Stuffed cloth animal
4         Board game cardboard and plastic
etc .....

MATERIALS
-----------------------------
TOY_ID     PLASTIC
-----------------------------
1
2
3
4
etc ......

MATERIALS テーブルを更新して、TOYS テーブルの一致する TOY_ID に対応する TOY_DESC に「プラスチック」という単語が含まれている場合、MATERIALS テーブルの PLASTIC 列に番号 1 を挿入する必要があります。これは私が試したことです:

UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic%');

私がこれを試したとき、それは何もしませんでした。

それから私は試しました...

UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE "%plastic%");

それから私に与えた:

MATERIALS
-----------------------------
TOY_ID     PLASTIC
-----------------------------
 1          1
 2
 3
 4
 etc ......

それから私は試しました...

UPDATE MATERIALS SET PLASTIC = 1 WHERE TOY_ID = (SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic,%');

そして、それはもう1つのレコードのみを更新しました:

MATERIALS
-----------------------------
TOY_ID     PLASTIC
-----------------------------
1            1
2            1
3
4
etc ......

それでも、説明に「プラスチック」という単語が含まれるすべてのレコードが更新されたわけではありません!! 理解できません。すべてのレコードが更新されないのはなぜですか? 単語の末尾に他の種類の記号または文字があるかどうかは理解できましたが、ありません。それは他の説明とまったく同じ単語のようであり、それらはすべてスキップされています! 一重引用符を二重引用符に置き換えるまで、更新がまったく機能しなかった理由についてさらに混乱しています。これはデータベースの種類 (sqlite と mysql) の違いによるものですか?

編集**:

下のポスターからの提案を試して、問題がどこにあるのかをさらに詳しく調べました. 私がするとき:

SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic%'

説明に plastic という単語が含まれるすべてのレコードのリストを正常に取得できました。したがって、LIKE ステートメントは問題ではありません。問題は、これを MATERIALS テーブルに反映させるにはどうすればよいかということです。

試合ごとに何らかのループが必要だと思いますか?

4

1 に答える 1