我有一个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
值更新每一行?
答案 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