Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新查询对每一行使用相同的值_Sql_Sqlite - Fatal编程技术网

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

Sql 更新查询对每一行使用相同的值,sql,sqlite,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 ); 作为调试方案的一部分,我正在尝试每个(子)查询 此查询(与上述更新中使用

我有一个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
id | name
----------------------
 1 | Lorum Ipsum
 2 | Lorum Ipsum
 3 | Lorum Ipsum
但是:更新表中的所有我的行都具有相同的
名称
值*gaps*

SELECT products_new.name from products_new;
例如:

id | title
----------------------
 1 | Lorum Ipsum
 2 | Lorum Not Ipsum
 3 | Ipsum Lorum
id | name
----------------------
 1 | Lorum Ipsum
 2 | Lorum Ipsum
 3 | Lorum Ipsum
所以我的问题是:
如何使用相关的
名称
值更新每一行?

这是因为内部查询中的
products\u new
表在
UPDATE
子句中隐藏了
products\u new
表。因此,您永远不会实际连接正在更新的表中的行

您需要确保尝试更新的每一行的id(
product\u id
)都与包含新值的表(
products\u sap
)连接:

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

我并不完全熟悉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

类似于:谢谢@xQbert。我确实看到了答案,但没有看到代码中的问题。我想我盯着这个问题看太久了。谢谢——它现在起作用了。我从内部查询中删除了
products\u new
来自products\u sap,products\u new
现在是我的内部查询中的
来自products\u sap
。您的答案中确实有一点输入错误:在
updateproducts\u new
之后立即删除
x
。它实际上是表的别名,因此您可以在内部查询中使用
x
而不是
products\u new
引用它。对。我想该睡觉了:)谢谢@joão。