Согласно документации, объединения при использовании с оператором обновления работают так же, как при использовании в выборках.
Например, если у нас есть эти две таблицы:
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 |
+------------+------------+
с помощью этого оператора select:
SELECT orders.customerid
FROM orders
JOIN customers ON (customers.customerid = orders.customerid)
возвращается:
+------------+
| customerid |
+------------+
| 1 |
| 1 |
| 2 |
| 3 |
+------------+
Итак, я ожидал следующего утверждения:
UPDATE orders
JOIN customers ON (customers.customerid = orders.customerid)
SET ordercount = ordercount + 1
чтобы обновить количество заказов для клиента # 1 (customerid = 1), равное 11, но на самом деле это не так. Вот результаты после обновления:
mysql> SELECT * FROM customers;
+------------+------------+
| customerid | ordercount |
+------------+------------+
| 1 | 10 |
| 2 | 4 |
| 3 | 9 |
| 4 | 5 |
| 5 | 7 |
+------------+------------+
Как видите, он был увеличен только один раз, несмотря на то, что он встречается дважды в таблице заказов, и, несмотря на это, оператор select возвращает его правильно.
Это ошибка в MySQL или я что-то не так делаю? Я стараюсь избегать использования группы по причинам производительности, поэтому мне интересно понять, что происходит.
Заранее спасибо