mysql mass插入到多对多的表中

时间:2012-10-01 13:15:54

标签: mysql

我已经介绍了一个新的多对多表,并且想知道是否有办法用2个表进行SELECT / INSERT。

表:

  1. 用户
  2. user_groups(空)
  3. 如何将所有用户插入每个组?例如,用所有内容填充user_groups表。

    user_groups包含用户和组的forien密钥。

    使用显示表结构的更多详细信息进行更新:

    --
    -- Table structure for table `groups`
    --
    
    CREATE TABLE IF NOT EXISTS `groups` (
      `group_id` int(6) NOT NULL AUTO_INCREMENT,
      `group_name` varchar(255) NOT NULL,
      PRIMARY KEY (`group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `users`
    --
    
    CREATE TABLE IF NOT EXISTS `users` (
      `user_id` int(6) NOT NULL AUTO_INCREMENT,
      `user_name` varchar(255) NOT NULL,
      `user_address` varchar(255) NOT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `user_groups`
    --
    
    CREATE TABLE IF NOT EXISTS `user_groups` (
      `user_group_id` int(6) NOT NULL AUTO_INCREMENT,
      `user_id` int(6) NOT NULL,
      `group_id` int(6) NOT NULL,
      PRIMARY KEY (`user_group_id`),
      KEY `user_id` (`user_id`,`group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

1 个答案:

答案 0 :(得分:1)

您可以执行INSERT ... SELECT。

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

您只需找到一种方法来选择所需的数据集,如果我理解正确,您希望将每个用户添加到每个组。具有始终为真的连接条件的INNER JOIN将使每个用户与每个组匹配。

所以选择就像是

SELECT users.user_id, groups.group_id FROM users INNER JOIN groups ON 1=1

所以整个查询应该像

INSERT INTO user_groups (user_id,group_id) SELECT users.user_id, groups.group_id FROM users INNER JOIN groups ON 1=1