2011-11-28 46 views
1

我有一個SQLite數據庫,需要更新。 使用更新語句應該很容易。更新查詢使用每行相同的值

但事情不會按計劃進行:

這是完整的查詢:

UPDATE products_new SET name = 
(
    SELECT products_sap.title 
    FROM products_sap, products_new 
    WHERE products_sap.id_a = products_new.product_id 
); 

正如我的調試方案,我嘗試了每一個(子)查詢的一部分。

這個查詢(等同於上面的更新中使用的一個) 顯示我正確的記錄:

SELECT products_sap.id, products_sap.title 
FROM products_sap, products_new 
WHERE products_sap.id_a = products_new.product_id; 

例子:

id | title 
---------------------- 
1 | Lorum Ipsum 
2 | Lorum Not Ipsum 
3 | Ipsum Lorum 

:我的所有行的更新表具有相同的值name * gasps *。

SELECT products_new.name from products_new; 

例子:

id | name 
---------------------- 
1 | Lorum Ipsum 
2 | Lorum Ipsum 
3 | Lorum Ipsum 

所以我的問題是: 我怎麼能更新的每一行與它的相關name價值?

+0

類似:http://stackoverflow.com/questions/3845718/sql-how-to-update-table-values-from -other-table-with-the-same-user-name – xQbert

+0

謝謝@xQbert。我確實看到了答案,但在我的代碼中沒有看到問題。我想,盯着這個問題太久了。 – Webdevotion

回答

0

這是因爲在products_new表內查詢隱藏products_newUPDATE子句。因此,你永遠不會真正加入你正在更新的表中的行。

你需要確保每一行,你要更新,其ID(product_id)中加入了與包含新值的表(products_sap):

UPDATE products_new x 
SET name = (SELECT products_sap.title 
      FROM products_sap 
      WHERE products_sap.id_a = x.product_id); 
+0

謝謝 - 它現在正在工作。 我從products_sap的內部查詢中刪除了'products_new': ',而我的內部查詢中的products_new'現在是'from products_sap' 。 您的答案中有一個小錯字:在'update products_new'後面刪除'x'。 – Webdevotion

+0

它實際上是表的別名,所以你可以用'x'而不是'products_new'在內部查詢中引用它。 –

+0

對。我認爲是時候睡覺了:) 謝謝@joão。 – Webdevotion

0

我不能完全熟悉SQLite的,但你可以做這樣的事情在其他方言如下:

UPDATE products_new SET name = products_sap.title 
    FROM products_new 
    INNER JOIN products_sap 
    ON products_new.product_id = products_sap.id_a 
相關問題