2013-10-08 118 views
0

我正在使用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聲明不是問題。現在的問題是,我如何才能將它反映在材料表中?

我猜我不知何故需要每個比賽的循環?

回答

1

通過分解您的查詢的組件來解決您的查詢。首先運行嵌套/子查詢:

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

它會給你預期的結果嗎?

現在你可以專注於類似的表達。我不是sqllite專家,但它看起來好像%like%將需要兩邊的字符。所以,你可以這樣做:

SELECT TOY_ID FROM TOYS 
WHERE 
    TOY_DESC LIKE "%plastic%" 
    OR TOY_DESC LIKE "plastic%" 
    OR TOY_DESC LIKE "%plastic" 

還有一些其他的可能性在這裏:SQLite query, 'LIKE'

UPDATE:太好了,現在你知道你所得到的預期ID和不必與子查詢一塌糊塗了。現在嘗試,而不是WHERE TOY_ID = (使用WHERE TOY_ID in (

+0

當我嘗試SELECT TOY_ID FROM TOYS WHERE TOY_DESC LIKE'%plastic%'我得到所有包含說明中的塑料記錄列表!奇怪的是它可以用單引號和雙引號進行操作。但現在問題是讓這些記錄在材料表中的PLASTICS列的UPDATE中表示。 – user1066524

+0

@ user1066524看到更新 – AaronLS

+1

是的。你是對的。使用IN做了訣竅。 – user1066524

相關問題