我正在使用sql gui工具'SQLite數據庫瀏覽器2.0 b1'中的'執行SQL'功能。使用UPDATE,SET,WHERE和LIKE的Sqlite語句沒有更新所有記錄
我不確定我面臨的問題是因爲瀏覽器中的錯誤還是我的SQL錯誤。我知道我在瀏覽器工具中發現了一些錯誤。不管怎樣,這是我處理目前的問題......
我有一個數據庫中的兩個表:
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 ......
我試圖更新材料表,這樣,如果與匹配TOY_ID對應的TOY_DESC在TOYS表中包含單詞'plastic',它應該將數字1插入MATERIALS表中的PLASTIC列。這是我已經嘗試過:
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,%');
和更新的只多了一個記錄:
MATERIALS
-----------------------------
TOY_ID PLASTIC
-----------------------------
1 1
2 1
3
4
etc ......
但是,它並沒有更新說明中包含單詞plastic的所有記錄!我不明白。爲什麼不是所有記錄都在更新?我可以理解這些單詞的末尾是否還有其他類型的符號或字符,但沒有。它就像其他描述中的完全相同的單詞,它們全部被跳過! 我更加困惑,爲什麼更新不能在全部工作,直到我用雙引號替換單引號。這是因爲數據庫類型的不同(sqlite與mysql)?
編輯**:
我試圖從下面的海報的建議,進一步打破它,看看那裏的問題可能是。當我這樣做時:
SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE '%plastic%'
我成功地獲取了包含描述中的塑料字的所有記錄的列表。所以LIKE聲明不是問題。現在的問題是,我如何才能將它反映在材料表中?
我猜我不知何故需要每個比賽的循環?
當我嘗試SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE'%plastic%'我得到所有包含說明中的塑料記錄列表!奇怪的是它可以用單引號和雙引號進行操作。但現在問題是讓這些記錄在材料表中的PLASTICS列的UPDATE中表示。 – user1066524
@ user1066524看到更新 – AaronLS
是的。你是對的。使用IN做了訣竅。 – user1066524