MySQL: Für jede Zeile in der Tabelle verändern, eine Zeile in einer anderen Tabelle

Ich habe zwei Tabellen :

SELECT * FROM data;
+----+---+---+
| id | c | g |
+----+---+---+
|  1 | 1 | 2 |
|  2 | 1 | 2 |
|  3 | 1 | 2 |
|  4 | 1 | 3 |
|  5 | 2 | 2 |
|  6 | 2 | 3 |
|  7 | 2 | 3 |
+----+---+---+

und

SELECT * FROM changes;
+----+-------+-------+---+
| id | c_old | c_new | g |
+----+-------+-------+---+
|  1 |     1 |     2 | 2 |
|  2 |     2 |     1 | 3 |
|  3 |     1 |     2 | 2 |
+----+-------+-------+---+

Für jede Zeile in changes ich ändern muss exakt eine Zeile in data wo data.g=changes.g and data.c=changes.c_old. (davon ausgehen, dass es immer genug Streichhölzer)

Ich bin versucht, dies zu tun mit dieser Abfrage:

UPDATE 
data INNER JOIN changes ON 
  data.c=changes.c_old AND p.g=changes.g 
SET data.c_id=changes.c_new 
WHERE data.id IN( 
  SELECT id FROM (
    SELECT data.id from 
    data INNER JOIN changes ON
      data.c=changes.c_old AND data.g=changes.g 
    GROUP BY changes.id
  ) AS another_table
)

Nun, ich bin überrascht, dass das Chaos eine Abfrage läuft. Aber, es nicht tut, was ich brauche. Die innerste select gibt diese Tabelle:

+----+
| id |
+----+
|  1 |
|  6 |
|  1 |
+----+

Beachten Sie, dass 1 erscheint zweimal. Das bedeutet, dass nur zwei Zeilen geändert wurde (Zeile 1 habe zweimal gewechselt), wenn ich Sie brauchte drei zu ändern. Gibt es eine Möglichkeit, sicherzustellen, dass jede id in das sub-query ist einzigartig? Gibt es einen besseren Weg, dies zu erreichen Schlamassel?

Vielen Dank im Voraus!

InformationsquelleAutor Luke | 2014-02-19

Schreibe einen Kommentar