mysql - 通过使用选择连接查询将 2 个列值添加在一起来更新列值

标签 mysql wordpress join sql-update woocommerce

我正在寻找一种通过将其他两列的值添加在一起来更新第三列的方法。我遇到的问题是 UPDATE 语句似乎需要指定一个表,但我通过执行 SELECT 和 JOIN 语句来使用“虚拟”表。这是我目前拥有的代码:

   SELECT *
     FROM wp_posts      AS p
LEFT JOIN (
            SELECT tr.object_id AS id, 
                   t.name       AS physical
              FROM wp_term_relationships AS tr  
        INNER JOIN wp_term_taxonomy AS x 
                     ON (x.taxonomy='pa_physical-inventory' 
                    AND x.term_taxonomy_id=tr.term_taxonomy_id)
        INNER JOIN wp_terms AS t 
                     ON t.term_id=x.term_id    
          ) AS mo ON p.id = mo.id
LEFT JOIN (
            SELECT tr.object_id AS id, 
                   t.name       AS murphy
              FROM wp_term_relationships AS tr  
        INNER JOIN wp_term_taxonomy AS x 
                     ON (x.taxonomy='pa_murphy-inventory' 
                    AND x.term_taxonomy_id=tr.term_taxonomy_id)
        INNER JOIN wp_terms AS t 
                     ON t.term_id=x.term_id 
          ) AS pa ON p.id = pa.id
LEFT JOIN (
           SELECT post_id AS id, meta_value AS totalinventory
             FROM wp_postmeta
            WHERE meta_key = '_stock'
          ) AS totalinventory ON p.id = totalinventory.id
    WHERE p.post_status = 'publish' 
      AND p.post_type = 'product'

我希望将“墨菲”和“物理”添加在一起,并为返回的每一行插入“totalinventory”。其中一些行返回“null”(例如,如果“murphy”没有设置库存,则它显示为 null),因此我希望在将值添加在一起时也将其视为“0”。

任何帮助或指导将不胜感激,因为我已经为此摸不着头脑太久了。

编辑:我对解决方案中的 PHP 持开放态度,因为最终这将使用 cron 作业运行。

最佳答案

在更简单的情况下,SELECT 通常可以转换为 UPDATE,如下所示...

选择:

SELECT * 
FROM [tables and joins]
WHERE [conditions]
;

更新:

UPDATE [tables and joins (as above)]
SET tableA.fieldB = tableC.fieldD + tableE.fieldF
WHERE [conditions (same as above)]
;

当然,如果您有 LEFT JOIN,则需要在必要时进行补偿;我发现最好先选择 SET 所需的所有部分,转换为 UPDATE 查询之前。

免责声明:正如我所言,根据情况和数据的具体情况,这并不总是有效。

关于mysql - 通过使用选择连接查询将 2 个列值添加在一起来更新列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150693/

相关文章:

mysql - 如何获取 MySQL 中最后一次出现字符之前的所有内容?

javascript - 下拉菜单 JavaScript 延迟

html - Clearfix 不适用于所有页面

mysql - 选择 MySQL Month() 作为空列

mysql - 从两个表中获取唯一数据

mysql - SQL select in select where 从结果中获取最大值

php - 按最大日期选择 account_id

jquery - ajaxRequest.success 不是 smoothState.js 的函数

php - 根据通配符 JOINS 过滤 MYSQL 结果

mysql - 如何在MySQL中进行动态限制?