Mysql 根据 1 行更新 6 行
Mysql update 6 rows based on 1 row
我有一个名为 "wp_postmeta"
的 wordpress 数据库 table
看起来像这样(简化)
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
我需要更新所有_price、_visibility、_stock、_stock_status、_sale_price、_regular_price based on meta_value of _sku
我试过了,但无法添加另一个 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'
请帮忙!
您可以使用 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', . . . );
我相信你可以通过 CASE 语句实现你所需要的,例如:
SET a.meta_value = CASE a.meta_key
WHEN '_price' THEN '5'
WHEN '_visibility' THEN '6'
ELSE a.meta_value
END
我已经为你写了查询。我希望它能解决你的问题:
查询
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);
我有一个名为 "wp_postmeta"
的 wordpress 数据库 table看起来像这样(简化)
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
我需要更新所有_price、_visibility、_stock、_stock_status、_sale_price、_regular_price based on meta_value of _sku
我试过了,但无法添加另一个 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'
请帮忙!
您可以使用 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', . . . );
我相信你可以通过 CASE 语句实现你所需要的,例如:
SET a.meta_value = CASE a.meta_key
WHEN '_price' THEN '5'
WHEN '_visibility' THEN '6'
ELSE a.meta_value
END
我已经为你写了查询。我希望它能解决你的问题:
查询
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);