MYSQL:使用选择和多个联接更新数据库行

MYSQL:使用选择和多个联接更新数据库行,mysql,wordpress,woocommerce,Mysql,Wordpress,Woocommerce,基本上,我正在尝试为一个客户端修复一个损坏的WooCommerce数据库 我有一个wp_woocommerce_order_itemmeta表,所有的_product_id值都被删除了。我可以使用此select语句获得正确的ID。它将返回所有ID,按需要每行返回一个 SELECT wp_wc_order_product_lookup.product_id FROM wp_woocommerce_order_items INNER JOIN wp_woocommerce_order_i

基本上,我正在尝试为一个客户端修复一个损坏的WooCommerce数据库

我有一个wp_woocommerce_order_itemmeta表,所有的_product_id值都被删除了。我可以使用此select语句获得正确的ID。它将返回所有ID,按需要每行返回一个

SELECT
  wp_wc_order_product_lookup.product_id
FROM
  wp_woocommerce_order_items
INNER JOIN
  wp_woocommerce_order_itemmeta
    ON 
      wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
INNER JOIN
  wp_wc_order_product_lookup
    ON
      wp_wc_order_product_lookup.order_id = wp_woocommerce_order_items.order_id
WHERE
  wp_woocommerce_order_itemmeta.meta_key = '_product_id'
现在,当我试图写一个update语句时,我无法让它工作。我试过几种不同的方法。我在某个地方读到,
SET
必须移过
内部连接

UPDATE
  wp_woocommerce_order_itemmeta
INNER JOIN 
  wp_woocommerce_order_itemmeta
    ON 
      wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
INNER JOIN
  wp_wc_order_product_lookup
    ON
      wp_wc_order_product_lookup.order_id = wp_woocommerce_order_items.order_id
SET
  wp_woocommerce_order_itemmeta.meta_value = wp_wc_order_product_lookup.order_id
WHERE
  wp_woocommerce_order_itemmeta.meta_key = '_product_id'
该代码产生以下错误
[Err]1066-非唯一表/别名:“wp\u woocommerce\u order\u itemmeta”

wp\u woodcommerce\u order\u itemmeta

wp\u wc\u order\u product\u lookup


也许你想要的是这样的东西:

 UPDATE wp_woocommerce_order_itemmeta x
  JOIN wp_woocommerce_order_items y
    ON y.order_item_id = x.order_item_id
  JOIN wp_wc_order_product_lookup z
    ON z.order_id = y.order_id
   SET x.meta_value = z.order_id
 WHERE x.meta_key = '_product_id'

您可以用简单的PHP脚本解决这个问题,下面是逻辑 1) 从wp_wc_order_product_lookup中选择唯一的product_id和order_id 2) 步骤1中的结果集用于在循环的帮助下更新表wp\u woocommerce\u order\u itemmeta


如果在PHP中编写脚本时遇到任何问题,请告诉我,然后我将提供代码。

是的,是时候掌握表/列别名了。尽管在本例中,这只是一个明显的证明error@Strawberry你能详细说明一下吗?我不确定你想推断什么。喝杯咖啡,重新阅读你的问题。这个推论将不言而喻。这是有效的!我以后会详细研究的。我已经浪费了很多时间尝试不同的事情。我确实必须将设置值更改为product_id。我假设您有意选择order_id,因为我在屏幕截图中突出显示了它,但这是无意的突出显示。再看一眼,我确实发现我的问题是错的。不管怎样,谢谢你的帮助。我知道我可以通过PHP来完成,但我正在尝试通过SQL来完成。我知道SQL必须是可行的,但正如@草莓所显示的那样,我只是累了,而且犯了错误。