1

例如,假设您有一个 CD 数据库,您希望将所有类型为“流行”的 CD 的 CD 价格提高 10%。然而类型 Genre 是一个 SET。它可以是多种流派,例如 RnB 和摇滚。

我的代码如下:

UPDATE CD
set price = price * 1.1
WHERE genre = 'Pop';

但是,我的代码仅更新流派仅流行的行。如果流派是“摇滚、流行、RnB”,则不会更新。我究竟做错了什么?

4

3 回答 3

2

您需要使用LIKE文档):

... WHERE genre LIKE '%Pop%'

如果您的流派是“摇滚、流行、RnB”,这将匹配。

您应该知道您使用的是非规范化结构。更好的设计是有一个流派参考表:

CD_Genre(CD,流派)

于 2012-11-27T18:07:37.170 回答
1

使用like关键字

UPDATE CD set price = price * 1.1 WHERE genre like '%Pop%';
于 2012-11-27T18:07:19.910 回答
0

在查询中访问 SET 值的最佳方法是 FIND_IN_SET:

UPDATE CD
set price = price * 1.1
where FIND_IN_SET('Pop', `genre`)

关于 FIND_IN_SET 的更多信息可以在这里找到:http: //dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

于 2013-09-19T09:10:47.140 回答