mysql - 带递归逻辑的SQL查询

我有一个MySQL表,它有2列来记录用户的登录信息:

 User_id  Device_id
     a       123
     b       123
     b       321
     d       321
     e       aaa
     f       ccc
     g       cba
     h       aaa
     h       ccc
     i       cba
     i       aaa


现在,我想添加一列 Group:如果user_id由同一组设备登录,则将它们放在一起。例如,如下所示,用户帐户 ab在设备 123上登录,因此 ab在同一组中。当用户帐户 b也已在设备 321上登录时,则 321登录的所有帐户都应加入该组


 User_id  Device_id    Group 
     a       123         1
     b       123         1
     b       321         1
     d       321         1
     e       aaa         2
     f       ccc         2
     g       cba         2
     h       aaa         2
     h       ccc         2
     i       cba         2
     i       aaa         2


这不能简单地用 group by处理,那么如何使用SQL表示列 Group

最佳答案

您可以使用以下查询,

//为了将来插入

插入表名
值(j,“ 123”,大小写分组
当(SELECT count()FROM tableName tn WHERE tn.Device_id ='123')= 0然后(SELECT MAX(tn.grouping)+1 FROM tableName tn)
当(SELECT count()FROM tableName tn WHERE tn.Device_id ='123')> 0然后(SELECT tn.grouping FROM tableName tn WHERE tn.Device_id ='123')
结束
);

//更新现有数据

UPDATE tableName
集合分组=案例分组
当(SELECT count()FROM tableName tn WHERE tn.Device_id ='123')= 0然后(SELECT MAX(tn.grouping)+1 FROM tableName tn)
当(SELECT count()FROM tableName tn WHERE tn.Device_id ='123')> 0然后(SELECT tn.grouping FROM tableName tn WHERE tn.Device_id ='123')
结束;