我正在尝试编写一个sql脚本来进行批量插入。我需要它将经理用户添加到经理的组中。我试着像这样写
INSERT INTO group_member (group_id, user_id) VALUES ((SELECT group_id FROM user_group WHERE group_name = 'Manager') , (SELECT user_id
FROM user WHERE manager=1 and user_status = 1));
但我收到此错误
子查询返回超过1行
我理解错误,但不确定如何解决它,以便我不会错过任何用户。
当运行时,可能有0到多个经理,不确定这是否会产生影响。
sql版本:5.6.27
CREATE TABLE user_group(
group_id INT(11) NOT NULL AUTO_INCREMENT,
group_name VARCHAR(128) NULL DEFAULT NULL,
PRIMARY KEY (group_id)
);
CREATE TABLE user (
user_id INT(11) NOT NULL AUTO_INCREMENT,
user_name VARCHAR(128) NULL DEFAULT NULL,
manager INT(11) NOT NULL
user_status INT(11) NOT NULL
PRIMARY KEY (user_id)
);
CREATE TABLE group_member (
group_id INT(11) NOT NULL,
user_id INT(11) NOT NULL,
PRIMARY KEY (group_id, user_id)
);
答案 0 :(得分:1)
我需要它将经理用户添加到经理的小组
INSERT INTO group_member (group_id, user_id)
SELECT (SELECT group_id FROM `group` WHERE group_name = 'Manager'),
user_id
FROM user WHERE manager=1 and user_status = 1;
当然,必须只有一个名为 Manager 的组。
mysql> SELECT * FROM `user`;
+---------+-------------+---------+
| manager | user_status | user_id |
+---------+-------------+---------+
| 1 | 1 | 1 |
| 1 | 1 | 2 |
+---------+-------------+---------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM `group`;
+----------+------------+
| group_id | group_name |
+----------+------------+
| 17 | Manager |
+----------+------------+
1 row in set (0.00 sec)
mysql> INSERT INTO group_member (group_id, user_id)
-> SELECT (SELECT group_id FROM `group` WHERE group_name = 'Manager'),
-> user_id
-> FROM user WHERE manager=1 and user_status = 1;
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * FROM group_member;
+----------+---------+
| group_id | user_id |
+----------+---------+
| 17 | 1 |
| 17 | 2 |
+----------+---------+
2 rows in set (0.00 sec)
答案 1 :(得分:1)
您想要insert . . . select
:
INSERT INTO group_member (group_id, user_id)
SELECT g.group_id, u.user_id
FROM (SELECT group_id FROM user_group WHERE group_name = 'Manager') g CROSS JOIN
(SELECT user_id FROM user WHERE manager = 1 and user_status = 1) u;
如果该群组已有成员,您可能需要将其过滤掉。
您也可以将其写为:
INSERT INTO group_member (group_id, user_id)
SELECT g.group_id, u.user_id
FROM user u JOIN
user_group g
ON g.group_name = 'Manager' AND
(u.manager = 1 and u.user_status = 1);