更新查询对每行使用相同的值

时间:2011-11-28 22:32:40

标签: sql sqlite

我有一个SQLite数据库,需要更新。 使用update语句应该很容易。

但事情没有按计划进行:

这是完整的查询:

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值更新每一行?

2 个答案:

答案 0 :(得分:0)

这是因为内部查询中的products_new表是隐藏 products_new子句中的UPDATE表。因此,您实际上从未实际加入要更新的表中的行。

您需要确保对于您尝试更新的每一行,其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);

答案 1 :(得分: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