Laut der Dokumentation arbeiten Joins, wenn mit der Update-Anweisung verwendet, auf die gleiche Weise wie in Selects verwendet.Problem mit Update in MySQL
Zum Beispiel, wenn wir diese beiden Tabellen:
mysql> SELECT * FROM orders;
+---------+------------+
| orderid | customerid |
+---------+------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 1 |
+---------+------------+
mysql> SELECT * FROM customers;
+------------+------------+
| customerid | ordercount |
+------------+------------+
| 1 | 9 |
| 2 | 3 |
| 3 | 8 |
| 4 | 5 |
| 5 | 7 |
+------------+------------+
diese select-Anweisungen mit:
SELECT orders.customerid
FROM orders
JOIN customers ON (customers.customerid = orders.customerid)
kehrt:
+------------+
| customerid |
+------------+
| 1 |
| 1 |
| 2 |
| 3 |
+------------+
Also, ich hatte erwartet, die Erklärung unten :
zu aktualisieren Ordercount für Kunden # 1 (customerid = 1) 11 sein, aber eigentlich ist dies nicht der Fall, hier sind die Ergebnisse nach dem Update:
mysql> SELECT * FROM customers;
+------------+------------+
| customerid | ordercount |
+------------+------------+
| 1 | 10 |
| 2 | 4 |
| 3 | 9 |
| 4 | 5 |
| 5 | 7 |
+------------+------------+
Wie Sie es nur war sehen inkrementiert einmal, obwohl es zweimal in der Befehlstabelle vorkommt und trotzdem gibt die select-Anweisung es korrekt zurück.
Ist das ein Fehler in MySQL oder mache ich etwas falsch? Ich versuche zu vermeiden, Gruppen aus Performancegründen zu verwenden, daher mein Interesse zu verstehen, was vor sich geht.
Vielen Dank im Voraus
konnte, dass dieses Problem indirekt einen Fehler in Ihrem db Design zeigt? vielleicht ist es zu viel Mühe, eine Bestellung zu halten. Es kann zu Inkonsistenzen kommen, wenn Sie solche Bewertungen durch unabhängige Aktualisierungen anpassen. Vielleicht wäre es besser, diese Anzahl mit einer Abfrage zu generieren, wenn Sie sie brauchen. – markus
Ich habe nur die Kunden und Bestellungen Beispiel verwendet, um das Problem zu demonstrieren, ich werde es nicht auf diese Weise verwenden –