尝试根据另一列SQL中的vlue用不同的值更新新列的行

时间:2018-11-20 13:27:08

标签: mysql sql

我试图将一个名为vat_rate的新列添加到一个名为extra的表中,然后根据其他列中的值更新该列。

我设置了一个CASE来根据描述列更改值。但是,当我尝试运行该语句时,它说它与所有行匹配,但不更改任何行,并且它们在vat_rate列中保持为空。

以下是多余表的外观:

+----------+------------+--------------------+--------+----------+
| extra_id | booking_id | description        | amount | vat_rate |
+----------+------------+--------------------+--------+----------+
|   500101 |       5001 | Breakfast x 7      |  63.00 |     NULL |
|   500201 |       5002 | Breakfast x 2      |  18.00 |     NULL |
|   500301 |       5003 | Breakfast x 4      |  36.00 |     NULL |
|   500302 |       5003 | Phone Calls £4.69  |   4.69 |     NULL |
|   500402 |       5004 | Phone Calls £3.52  |   3.52 |     NULL |

这是我正在使用的语句:

ALTER TABLE extra
ADD vat_rate double;

UPDATE extra SET vat_rate = (CASE
WHEN description = 'Phone%'
    THEN 20
WHEN description = 'Breakfast%'
    THEN 0
END);

我正在使用的UPDATE语句怎么了?

2 个答案:

答案 0 :(得分:1)

改为使用== p

UPDATE extra SET vat_rate = (CASE
WHEN description like '%Phone%'
    THEN 20
WHEN description like '%Breakfast%'
    THEN 0
END);

答案 1 :(得分:0)

在使用%作为比较运算符时,=通配符没有预期的作用-当您使用=时,通配符是在寻找与指定字符串完全匹配的结果。

相反,您需要使用LIKE运算符来允许%匹配静态字符串之后的任意数量的字符:

UPDATE extra SET vat_rate = (CASE
WHEN description LIKE 'Phone%'
    THEN 20
WHEN description LIKE 'Breakfast%'
    THEN 0
END);

文档:https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_like