【问题标题】:Moving a specific list of users using SQL query使用 SQL 查询移动特定的用户列表
【发布时间】:2019-01-02 23:18:51
【问题描述】:

我有一个旧数据库和一个新数据库。旧数据库有各种用户组,每个用户组内都有用户。新数据库具有这些相同的用户组,但意外的是,所有用户都被放入了一个用户组。

我有旧的用户名(或用户 ID)列表,我想将它们移动到相应的用户组中。

我将如何使用 SQL 查询来执行此操作?

例如:

新数据库中的 100 个用户当前位于用户组“1”中,我想将其移至用户组“2”。用户组 1 已经有 2,000 个用户,所以我不能只将所有用户移到用户组 2。但是,我有 100 个用户的用户 ID(和用户名)列表以便选择它们。

相关的列名是: “用户身份” “用户组ID” “用户名”

它们都在“用户”表中。

谢谢!

注意:旧数据库未连接到新数据库。我有逗号分隔格式的旧用户 ID/用户名列表。

【问题讨论】:

  • 几个问题:1)用户在新旧数据库之间是否都有相同的UserId值? 2) 用户组在新旧数据库之间是否具有相同的 usergroupid 值? 3)当您提到“用户组2”时,是指UserGroupId = 2的组吗?
  • 对所有这些问题都同意。
  • @user1446650 我会说要做的第一件事就是将 CSV 加载到活动数据库中的表中。

标签: mysql sql


【解决方案1】:

类似

update user set usergroupid=2 
where userid in (select userid from old_user where usergroupid=2)

或者选择名字,只要有意义。应该给你的想法。

如果您有 csv 格式的 id 列表,例如“0,5,9,25,35”等而不是表格,则在回答评论时,查询将是:

update user set usergroupid=2 
where userid in (0,5,9,25,35)

【讨论】:

  • 很抱歉给您带来了困惑。在上面的查询中,我究竟会在哪里输入用户 ID 列表?仅供参考,旧数据库未连接到新数据库,所以我所拥有的只是旧用户 ID 的逗号分隔列表(在新数据库上是相同的)。我已经更新了我的问题以反映这一点。谢谢!
  • 您的帖子说您有用户列表 - 我假设它在表格中?如果它是一个硬编码列表,那么如果列表不太长,您可以将其输入为“where userid in (id1,id2,id3...)”。
  • 这很好用,而且比导入一些东西要容易得多。不过,我必须删除列表中的单引号(如果包含,则从 mariadb 返回 mysql 错误)。谢谢!
  • 如果您对答案满意,别忘了将答案标记为正确!
【解决方案2】:

由于您的旧用户列在 CSV 文本文件中,因此您需要将该 CSV 文件导入新数据库。有几种方法可以做到这一点,但一种方法是按照以下 Stack Overflow 答案中的建议执行此操作。将这些旧用户导入到名为OldSystemUser 的表中。请按照此处的说明进行操作: Load CSV into MySQL

OldSystemUser 表中用户组2 中的用户移动到新数据库中的用户组2。通过在 UPDATE 语句的 WHERE 子句中使用子查询来做到这一点:

UPDATE [user]
  SET [UserGroupId] = 2
  WHERE [UserId] IN (
    -- select all userIds that are in UserGroup 2 in the old database
    SELECT [UserId]
      FROM [OldSystemUser]
      WHERE [UserGroupId] = 2
  )

完成后,如果不再需要旧表,请不要忘记删除它:

DROP TABLE [OldSystemUser]

【讨论】:

  • 感谢您的回复!我为混乱道歉。旧数据库未连接到新服务器。我所拥有的只是旧用户的逗号分隔 csv。
  • 请使用这些新数据更新您的问题,以便对其他试图解决您的问题的人更有帮助。
猜你喜欢
  • 2023-03-22
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多