我需要更新pm_virtual.meta_value = 'no'的值,只为那些有pm_downloadable.meta_value = 'yes'的产品.我该怎么做呢?

SELECT
  p.ID,
  p.post_title,
  pm_downloadable.meta_value AS downloadable_trait,
  pm_virtual.meta_value AS virtual_trait
FROM
  xhdps_posts AS p
  INNER JOIN xhdps_postmeta AS pm_downloadable ON p.ID = pm_downloadable.post_id
  LEFT JOIN xhdps_postmeta AS pm_virtual ON p.ID = pm_virtual.post_id
  AND pm_virtual.meta_key = '_virtual'
WHERE
  p.post_type = 'product'
  AND p.post_status = 'publish'
  AND pm_downloadable.meta_key = '_downloadable'
  AND pm_downloadable.meta_value = 'yes'
  AND pm_virtual.meta_value = 'no'

推荐答案

您可以使用UPDATE`` statement along with a JOIN`根据指定条件对产品进行过滤.

UPDATE xhdps_postmeta AS pm_virtual
INNER JOIN xhdps_postmeta AS pm_downloadable ON pm_virtual.post_id = pm_downloadable.post_id
INNER JOIN xhdps_posts AS p ON pm_downloadable.post_id = p.ID
SET pm_virtual.meta_value = 'no'
WHERE 
    p.post_type = 'product'
    AND p.post_status = 'publish'
    AND pm_downloadable.meta_key = '_downloadable'
    AND pm_downloadable.meta_value = 'yes'
    AND pm_virtual.meta_key = '_virtual';

Mysql相关问答推荐

同一类型对象之间的多对多关系

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

如何将左联接的小计/总计行中的所有列作废

数组上的MySQL、JSON_CONTAINS用法

在MySQL中查找包含无效正则表达式的行

如何将数据导入MySQL中的master/replica struct

如何查找列的所有值都相同的行?

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

从 mysql RDS 导出数据以导入 questDb

谁能帮我优化where子句

组平SQL查询结果

MySQL:从 n 个关系表中 Select 所有具有 MAX() 值的行

MySQL 每组最大 n 只适用于多行

有没有更好的方法在无限滚动的网页上呈现获取的提要数据?

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

动态创建内联 SQL 表(用于排除左连接)

从终端访问 MAMP 的 MySQL

MySQL Workbench 无法加载 mysql.proc

从mysql中的大表中快速 Select 随机行

在 PHP 中运行 MySQL *.sql 文件