INSERT INTO device_group_relation (group_id, device_id, role, status, priority, connection_order, created_time, updated_time, created_by, updated_by) SELECT #{groupId}, t.device_id, CASE WHEN #{deviceRole} = 'CONTROLLER' THEN 1 WHEN #{deviceRole} = 'COLLABORATOR' THEN 2 WHEN #{deviceRole} = 'MONITOR' THEN 3 ELSE 2 END, 1, 5, (SELECT IFNULL(MAX(connection_order), 0) FROM device_group_relation WHERE group_id = #{groupId} AND is_deleted = 0) + t.row_num as connection_order, NOW(), NOW(), 'system', 'system' FROM ( SELECT device_id, @row_num := @row_num + 1 as row_num FROM ( SELECT #{deviceId} as device_id ) d CROSS JOIN (SELECT @row_num := 0) r ORDER BY device_id ) t WHERE NOT EXISTS ( SELECT 1 FROM device_group_relation dgr WHERE dgr.group_id = #{groupId} AND dgr.device_id = t.device_id AND dgr.is_deleted = 0 ) UPDATE device_group_relation SET is_deleted = 1, updated_time = NOW(), updated_by = 'system' WHERE group_id = #{groupId} AND device_id IN #{deviceId} AND is_deleted = 0 UPDATE device_group_relation SET role = CASE WHEN #{deviceRole} = 'CONTROLLER' THEN 1 WHEN #{deviceRole} = 'COLLABORATOR' THEN 2 WHEN #{deviceRole} = 'MONITOR' THEN 3 ELSE 2 END, updated_time = NOW(), updated_by = 'system' WHERE group_id = #{groupId} AND device_id = #{deviceId} AND is_deleted = 0 UPDATE device_group_relation SET is_deleted = 1, updated_time = NOW(), updated_by = 'system' WHERE group_id = #{groupId} AND device_id = #{deviceId} AND is_deleted = 0