MySQL REPLACE用于组合键而不是一个键

时间:2016-08-07 07:47:41

标签: mysql sql

我有一张这样的表:

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 UPDATEREPLACE

示例:我想更新注册了id 1的学生的课程,并在一个查询中将3,4和18而不是3,4,17放在课程ID中。

问题是这些函数适用于重复列,而不适用于列的重复组合。

在我的表中,student_ids和course_ids可以重复,结果是student_id和course_id不能。我想将ON DUPLICATE UPDATEREPLACE与列的组合结合使用。

任何想法?

1 个答案:

答案 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);