将多个sql update语句组合成一个

tez616oj  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(639)

我有以下三个更新声明:

UPDATE mx m JOIN main_territorypricingavail a USING (tp_id) 
SET sd_price = a.price WHERE a.code = 'SDBUY';

UPDATE mx m JOIN main_territorypricingavail a USING (tp_id) 
SET hd_price = a.price WHERE a.code = 'HDBUY';

UPDATE mx m JOIN main_territorypricingavail a USING (tp_id) 
SET uhd_price = a.price WHERE a.code = 'UHDBUY';

有没有可能把这三者结合成一句话?

1l5u6lss

1l5u6lss1#

你可以用 CASE 要在一次更新中完成此操作,请执行以下操作:

UPDATE mx m
INNER JOIN main_territorypricingavail a
USING (tp_id)
SET
    sd_price  = CASE WHEN a.code = 'SDBUY'  THEN a.price ELSE sd_price END,
    hd_price  = CASE WHEN a.code = 'HDBUY'  THEN a.price ELSE hd_price END,
    uhd_price = CASE WHEN a.code = 'UHDBUY' THEN a.price ELSE uhd_price END;

从性能的Angular 来看,如果mysql注意到某个值不会改变,它就不会在更新中覆盖某个列/记录的值。因此,对 ELSE 上面经常发生的情况可能并不像看上去那么糟糕(更多信息请参见此处)。

相关问题