sql-insert - mysql使用特殊的自动增量添加数据
问题描述
我有一个关于如何在表 users_in_queue 中添加数据的问题?我想从另一个表中添加数据,但字段number_in_queue
必须像每个表的自动增量列queue_id
。我的意思是表中的数据必须具有这种结构:
用户 ID | queue_id | number_in_queue
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 1 | 3
解决方案
旧版本必须使用一些用户变量才能获得结果。
这就是为什么它很丑
CREATE Table user_in_queues(user_id INTEGER, queue_id INTEGER , number_in_queue INTEGER)
✓
INSERT INTO user_in_queues VALUES (1,1,0),(2,1,0),(3,2,0),(4,1,0),(5,2,0);
✓
SELECT * FROM user_in_queues;
用户 ID | queue_id | number_in_queue ------: | --------: | --------------: 1 | 1 | 0 2 | 1 | 0 3 | 2 | 0 4 | 1 | 0 5 | 2 | 0
SELECT user_id, queue_id, number_in_queue FROM (SELECT user_id, IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue, @queue:=queue_id queue_id FROM (SELECT * FROM user_in_queues ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4 ORDER BY user_id;
用户 ID | queue_id | number_in_queue ------: | --------: | --------------: 1 | 1 | 1 2 | 1 | 2 3 | 2 | 1 4 | 1 | 3 5 | 2 | 2
UPDATE user_in_queues u SET number_in_queue = (SELECT number_in_queue FROM (SELECT user_id, IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue, @queue:=queue_id queue_id FROM (SELECT * FROM user_in_queues ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4 WHERE user_id = u.user_id AND queue_id = u.queue_id )
✓
SELECT * FROM user_in_queues;
用户 ID | queue_id | number_in_queue ------: | --------: | --------------: 1 | 1 | 1 2 | 1 | 2 3 | 2 | 1 4 | 1 | 3 5 | 2 | 2
db<>在这里摆弄
推荐阅读
- google-cloud-data-fusion - 云数据融合 - 启用牧马人
- javascript - 如何在滚动条之外显示日期时间选择器
- css - 横幅图像未出现在 Safari 上
- cloudkit - Mac Catalyst 中的 requestApplicationPermission userDiscoverability 失败
- javascript - 将 webpack 从版本“^4.30.0”更新到“^5.16.0”我收到路径和进程的奇怪错误
- unity3d - Unity 中可查询的动态纹理
- react-native - Flatlist 选择所有收藏夹,而不是一个
- node.js - 使用 Mongoose 进行索引
- go - break 如何在无限循环中工作?
- angular - Angular 中的 iframe