【发布时间】:2020-06-26 09:23:31
【问题描述】:
考虑表orders:
+-----------+----------------+
| AccountID | AccountOrderID |
+-----------+----------------+
| 1 | NULL |
| 5 | NULL |
| 1 | NULL |
| 6 | NULL |
| 5 | NULL |
| 2 | NULL |
| 6 | NULL |
| 4 | NULL |
| 4 | NULL |
| 5 | NULL |
+-----------+----------------+
我如何为AccountOrderID 相对于Account ID 分配一个增量ID,这样它的结果如下:
+-----------+----------------+
| AccountID | AccountOrderID |
+-----------+----------------+
| 1 | 1 |
| 5 | 1 |
| 1 | 2 |
| 6 | 1 |
| 5 | 2 |
| 2 | 1 |
| 6 | 2 |
| 4 | 1 |
| 4 | 2 |
| 5 | 3 |
+-----------+----------------+
到目前为止,我使用users 和一个名为LastOrderID 的列和一个触发器来增加它以及AccountOrderID(工作正常):
DELIMITER $$
CREATE TRIGGER `new_order` BEFORE INSERT ON maindb.orders
FOR EACH ROW BEGIN
UPDATE users
SET LastOrderID = LastOrderID + 1
WHERE AccountID = NEW.AccountID;
SET NEW.AccountOrderID = (SELECT LastOrderID FROM Credentials WHERE AccountID = NEW.AccountID);
END;
$$
DELIMITER ;
但我认为 users 表不应该用于此目的:还有其他方法可以实现此结果吗?
编辑
即使这正是 GMB 所说的,这里有一个提供类似示例的答案:https://stackoverflow.com/a/2404587/9373031
【问题讨论】:
标签: mysql sql sql-update