2010-05-28 128 views
1

不影響所有行我有以下查詢....更新查詢數據庫

UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 0, 5) 

我需要所有parent_id S設定爲0,其中id的前5個字符是一樣的PARENT_ID。這是影響0行,當我在查看數據,它應該影響超過10,000。

爲什麼這不會影響所有行的任何想法?

UPDATE 如果我做了 UPDATE SET col = '1'它會影響整個數據庫,但我的查詢,而不是整個數據庫上運行,我不明白。

UPDATE 正確的解決方案:

UPDATE `vehicle_catalog` SET parent = 0 WHERE SUBSTRING(id FROM 1 FOR 6) == SUBSTRING(parent_id FROM 1 FOR 6) 
+0

你可以嘗試運行SELECT * FROM vehicle_catalog WHERE parent_id = SUBSTR(id,0,5)?這將返回您的查詢將影響的行。如果SELECT沒有返回任何行,則需要更新條件;如果它返回你期望的結果,那麼其他事情正在發生。 – 2010-05-28 18:49:33

回答

2

SUBSTR() in MySQL使用基於1的索引。試試這個:

UPDATE vehicle_catalog SET parent_id = 0 WHERE parent_id = SUBSTR(id, 1, 5) 

此外,請參閱我對使用SELECT查詢來驗證您的條件是否正確構建的評論。

0

只是一種猜測,但

WHERE parent_id = SUBSTR(id, 0, 5),或者,它應該是...

WHERE SUBSTR(parent_id, 0, 5) = SUBSTR(id, 0, 5) 
0

您的更新只會影響單行如所寫。例如,如果ID爲12345678,查詢只會更新行12345你可以試試這個

UPDATE vehicle_catalog SET parent_id = 0 
WHERE parent_id like concat(SUBSTR(id, 0, 5), "%"); 
+0

這也行不通,用0代替所有的值 – Webnet 2010-06-02 15:44:37