1
根據文檔,與update語句一起使用時,連接的工作方式與在select中使用的方式相同。MySQL中的更新問題
例如,如果我們有這兩個表:
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(客戶ID = 1)爲11,但實際上這是不是這樣的,這裏是更新後的結果:
mysql> SELECT * FROM customers;
+------------+------------+
| customerid | ordercount |
+------------+------------+
| 1 | 10 |
| 2 | 4 |
| 3 | 9 |
| 4 | 5 |
| 5 | 7 |
+------------+------------+
正如你可以看到它是唯一儘管它在訂單表中出現了兩次,儘管select語句正確地返回了它,但仍會增加一次。
這是MySQL中的錯誤還是我做錯了什麼?我試圖避免使用group by來獲得性能方面的原因,因此我很有興趣瞭解發生了什麼。
在此先感謝
索引對性能同樣會不會是這個問題間接地顯示在你的數據庫設計缺陷?也許這對保持訂單計數來說太麻煩了。如果您通過獨立更新調整此類分數,它可能會導致不一致。也許最好是在需要的時候用查詢生成計數。 – markus 2009-04-27 12:09:21
我只使用客戶和訂單示例來演示問題,我不打算以這種方式使用它 – 2009-04-27 12:19:19