[英]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.