führt zu: _Betroffene Datensätze:
0 _
Kann es sein, dass bei diesem Test die entsprechenden Inhalt in Quelle und Ziel schon gleich waren? Bei mir funktioniert dein Ansatz (auch wenn es bei 50 Spalten ein Riesen-Statement ergibt):
mysql\> select \* from source;
+----+------+------+------+
| id | a | b | c |
+----+------+------+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 100 | 2 |
| 3 | 3 | 3 | 3 |
+----+------+------+------+
3 rows in set (0.00 sec)
mysql\> select \* from dest;
+----+------+------+------+
| id | a | b | c |
+----+------+------+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 100 | 2 |
| 3 | 3 | 3 | 3 |
| 4 | 4 | 4 | 4 |
+----+------+------+------+
4 rows in set (0.00 sec)
mysql\> update source set b=42 where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql\> update dest d, source s set d.a=s.a, d.b=s.b, d.c=s.c where d.id = s.id;
**Query OK, 1 row affected (0.00 sec)
Rows matched: 3 Changed: 1 Warnings: 0**
mysql\> update dest d, source s set d.a=s.a, d.b=s.b, d.c=s.c where d.id = s.id;
**Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0**
mysql\> select \* from dest;
+----+------+------+------+
| id | a | b | c |
+----+------+------+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 42 | 2 |
| 3 | 3 | 3 | 3 |
| 4 | 4 | 4 | 4 |
+----+------+------+------+
4 rows in set (0.01 sec)
Die Zählung der „betroffenen Datensätze“ (affected rows) hätte mich auch zunächst verwirrt; offenbar werde nur Sätze mit echten Veränderungen gezählt.
Andreas