繁体   English   中英

用三个表进行SQL更新

[英]SQL update with three tables

我想在一个表(A)的列中设置与另一个表(C)中给出的条件相关的所有项目的值。 为了解决这项工作,我提到使用以下查询:

Update Table1 AS A
SET A.Value = '1'
FROM Table1 AS A
INNER JOIN Table2 AS B
ON A.item = B.item
INNER JOIN Table3 AS C
ON B.item = C.item
WHERE C.Value = '2'

可悲的是,到目前为止,这还行不通,所以,我的错误在哪里?

这是原始代码:

Update wp_postmeta 
SET A.meta_value = '0.25'
FROM wp_postmeta AS A
INNER JOIN wp_woocommerce_order_itemmeta AS B
ON B.meta_id = A.meta_id 
INNER JOIN wp_woocommerce_order_item  AS C
ON C.order_item_id = B.order_item_id 
WHERE C.Value = '%250g%'

问题可能是第一行的“ as A”。 尝试

Update Table1 
SET Value = '1'
FROM Table1 AS A
INNER JOIN Table2 AS B
ON A.item = B.item
INNER JOIN Table3 AS C
ON B.item = C.item
WHERE C.Value = '2'

编辑:在您的特定代码中,我认为A.SET后就是问题所在。 尝试:

Update wp_postmeta 
SET meta_value = '0.25'
FROM wp_postmeta AS A
INNER JOIN wp_woocommerce_order_itemmeta AS B
ON B.meta_id = A.meta_id 
INNER JOIN wp_woocommerce_order_item  AS C
ON C.order_item_id = B.order_item_id 
WHERE C.Value = '%250g%'

说明:在语句的“ update ... set”部分的上下文中,缩写“ A”对sql server没有意义。

编辑:或者您可以按照i486在下面的注释中建议的方式进行操作。

您可以使用类似于select语句的样式来编写查询。 恕我直言,这更具可读性,您只需交换2个字就可以对其快速进行解释。

这是更新的样子:

UPDATE Table1 A
INNER JOIN Table2 B
  ON A.item = B.item
INNER JOIN Table3 C
  ON B.item = C.item
SET A.Value = '1'
WHERE C.Value = '2';

如果需要在同一条语句中,此样式还使您可以更新A以外的其他表中的列。

如果要运行一个解释计划,要查看联接是否正常工作,只需执行以下操作:

EXPLAIN SELECT * FROM Table1 A
INNER JOIN Table2 B
  ON A.item = B.item
INNER JOIN Table3 C
  ON B.item = C.item
-- SET A.Value = '1'
WHERE C.Value = '2';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM