我有一张这样的表:
CREATE TABLE registration (
`student_id` INT(5) NOT NULL,
`course_id` INT(5) NOT NULL
)
通常情况下,学生可以注册多个课程,如下所示:
------------------------------------------
|* student_id *|* course_id *|
------------------------------------------
| 1 | 3 |
------------------------------------------
| 1 | 4 |
------------------------------------------
| 1 | 17 |
------------------------------------------
| 2 | 2 |
------------------------------------------
| 2 | 37 |
------------------------------------------
我想用一个查询更新一个学生的注册。例如,使用MySQL的ON DUPLICATE UPDATE
或REPLACE
。
示例:我想更新注册了id 1的学生的课程,并在一个查询中将3,4和18而不是3,4,17放在课程ID中。
问题是这些函数适用于重复列,而不适用于列的重复组合。
在我的表中,student_ids和course_ids可以重复,结果是student_id和course_id不能。我想将ON DUPLICATE UPDATE
或REPLACE
与列的组合结合使用。
任何想法?
答案 0 :(得分:0)
ON DUPLICATE KEY UPDATE
实际上并不适合您的用例。
我猜您需要一个如下所示的更新声明。将@newValue替换为所需的新值course_id
。
UPDATE registration
SET course_id = (CASE WHEN course_id = 3 THEN @newValue
WHEN course_id = 4 THEN @newValue
WHEN course_id = 17 THEN @newValue
ELSE course_id END )
WHERE student_id = 1
AND course_id IN (3,4,17);