我试图将一个名为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语句怎么了?
答案 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