【问题标题】:Mysql update 6 rows based on 1 rowMysql根据1行更新6行
【发布时间】:2015-09-01 13:46:43
【问题描述】:

我有一个名为“wp_postmeta”的 wordpress 数据库表

看起来像这样(简化)

meta_id     post_id meta_key        meta_value
1           5       _price          -
2           5       _visibility     -
3           5       _stock          -
4           5       _stock_status   -
5           5       _sale_price     -
6           5       _regular_price  -
7           5       _sku            REALSKU

我需要根据 _sku 的元值更新所有 _price、_visibility、_stock、_stock_status、_sale_price、_regular_price

我试过了,但无法添加另一个 meta_values 进行更新,所以它只更新基于 sku 的 _price:

UPDATE wp_postmeta a
JOIN wp_postmeta b  ON a.post_id = b.post_id
AND b.meta_key = '_sku'
AND b.meta_value LIKE 'RELASKU'

SET a.meta_value = '5'
WHERE a.meta_key = '_price'

请帮忙!

【问题讨论】:

    标签: mysql wordpress woocommerce


    【解决方案1】:

    我相信您可以通过 CASE 语句实现您所需要的,例如:

    SET a.meta_value = CASE a.meta_key
        WHEN '_price' THEN '5'
        WHEN '_visibility' THEN '6'
        ELSE a.meta_value
    END
    

    【讨论】:

      【解决方案2】:

      您可以使用case

      UPDATE wp_postmeta a JOIN
             wp_postmeta b 
             ON a.post_id = b.post_id AND
                b.meta_key = '_sku' AND
                b.meta_value LIKE 'RELASKU'
           SET a.meta_value = (CASE WHEN a.meta_key = '_price' THEN '5'
                                    WHEN a.meta_key = '_visibility' . . .
                                    ELSE a.meta_value
                               END)
      WHERE a.meta_key IN ('_price', '_visibility', . . . );
      

      【讨论】:

        【解决方案3】:

        我已经为你写了查询。希望能解决你的问题:

        查询

        UPDATE wp_postmeta a
               JOIN
             wp_postmeta b ON a.post_id = b.post_id
                AND b.meta_key = '_sku'
                AND b.meta_value LIKE 'RELASKU' 
        SET 
            a.meta_value = 
            IFNULL(( CASE 
                WHEN a.meta_key = '_price' THEN  '13.5'
                WHEN a.meta_key = '_visibility' THEN  'None'
                WHEN a.meta_key = '_stock' THEN  '12'
                WHEN a.meta_key = '_stock_status' THEN  'Available'
                WHEN a.meta_key = '_sale_price' THEN  '12.5'
                WHEN a.meta_key = '_regular_price' THEN  '13.0'
             END),a.meta_value);
        

        【讨论】:

        • JOIN替换LEFT JOIN
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多