2016-08-07 6 views
2

Ich habe eine Tabelle wie folgt aus:MySQL für Kombinationen von Schlüsseln REPLACE anstelle eines Schlüssels

CREATE TABLE registration ( 
    `student_id` INT(5) NOT NULL, 
    `course_id` INT(5) NOT NULL 
) 

Normalerweise kann ein Student in der Lage sein, mehrere Kurse zu registrieren, wie folgt aus:

------------------------------------------ 
|* student_id *|*  course_id *| 
------------------------------------------ 
|   1   |   3   | 
------------------------------------------ 
|   1   |   4   | 
------------------------------------------ 
|   1   |   17   | 
------------------------------------------ 
|   2   |   2   | 
------------------------------------------ 
|   2   |   37   | 
------------------------------------------ 

Ich möchte die Anmeldungen eines Studenten mit einer Abfrage aktualisieren. mit MySQL ON DUPLICATE UPDATE oder REPLACE zum Beispiel.

Beispiel: Ich möchte die Kurse der Schüler mit ID 1 registriert zu aktualisieren, und 3,4 und 18 statt 3,4,17 in den Kurs IDs, in einer Abfrage.

Das Problem ist diese Funktionen arbeiten für doppelte Spalte, nicht für doppelte Kombination von Spalten.

In meiner Tabelle können student_ids und course_ids wiederholen, die Kombination aus student_id und course_id nicht sein. Ich möchte ON DUPLICATE UPDATE oder REPLACE mit der Kombination der Spalten verwenden.

irgendwelche Ideen?

+0

erklären Bitte ein bisschen mehr – 1000111

+1

zu klären Sie können einen Verbund eindeutigen Schlüssel erstellen '' – 1000111

Antwort

0

ON DUPLICATE KEY UPDATE ist eigentlich nicht für Ihren Anwendungsfall geeignet.

Ich denke, Sie brauchen eine Update-Anweisung wie unten. Ersetzen Sie @newValue durch Ihren gewünschten neuen Wert 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

denke ich, OP ist für eine Atom-Version von 'DELETE FROM Registrierung, wo STUDENT_ID = 1; INSERT INTO VALUES (1, 3), (1, 4), (1, 17); '. – shmosel

Verwandte Themen