2016-08-07 2 views
2

У меня есть таблица вроде этого:MySQL REPLACE для комбинаций клавиш вместо одной клавиши

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 в идентификаторы курса.

проблема заключается в том, что функции тезисов работают для дублирования столбца, а не для дублирования комбинации столбцов.

В моей таблице, student_ids и course_ids могут повторяться, быть комбинацией student_id и course_id нельзя. Я хочу использовать ON DUPLICATE UPDATE или REPLACE с комбинацией столбцов.

любые идеи?

+0

Пожалуйста, объясните немного больше, чтобы уточнить – 1000111

+1

Вы можете создать составной уникальный ключ '' – 1000111

ответ

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); 
+0

Я думаю, что OP ищет атомную версию 'DELETE FROM регистрации WHERE student_id = 1; INSERT INTO VALUES (1, 3), (1, 4), (1, 17); '. – shmosel

Смежные вопросы