Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从查询填充新表_Sql_Mysql Workbench - Fatal编程技术网

SQL从查询填充新表

SQL从查询填充新表,sql,mysql-workbench,Sql,Mysql Workbench,​大家好,我真的是sql新手,所以如果这听起来很愚蠢,我很抱歉 我有一个查询,显示了两个表中的所有女性驱动程序(employee和role每个表总共有1000行) 员工表 1 Brendon Hayford Male 2 Appolonia Mawer Female 3 Stanly Loachhead Male 4 Kinny Hulcoop Male 5 Alyssa Vose Fe

​大家好,我真的是sql新手,所以如果这听起来很愚蠢,我很抱歉

我有一个查询,显示了两个表中的所有女性驱动程序(employee和role每个表总共有1000行)

员工表

    1   Brendon Hayford     Male
    2   Appolonia   Mawer   Female
    3   Stanly  Loachhead   Male
    4   Kinny   Hulcoop     Male
    5   Alyssa  Vose        Female
    6   Gerrie  Cradey      Female
    7   Katalin Coverly     Female
    8   Michelina   Yukhov  Female
    9   Abbey   Thunnerclif Male
    10  Skippy  Juett       Male
    11  Kizzee  Bleythin    Female
    12  Shea    Coxhell     Male
    13  Win Shilstone       Male
    14  Carita  Giddy       Female
    15  Tiebout Creffield   Male
1   Mechanic
2   Admin
3   Mechanic
4   Admin
5   Admin
6   Mechanic
7   Driver
8   Mechanic
9   Admin
10  Driver
11  Admin
12  Driver
13  Admin
14  Mechanic
15  Mechanic
角色表

    1   Brendon Hayford     Male
    2   Appolonia   Mawer   Female
    3   Stanly  Loachhead   Male
    4   Kinny   Hulcoop     Male
    5   Alyssa  Vose        Female
    6   Gerrie  Cradey      Female
    7   Katalin Coverly     Female
    8   Michelina   Yukhov  Female
    9   Abbey   Thunnerclif Male
    10  Skippy  Juett       Male
    11  Kizzee  Bleythin    Female
    12  Shea    Coxhell     Male
    13  Win Shilstone       Male
    14  Carita  Giddy       Female
    15  Tiebout Creffield   Male
1   Mechanic
2   Admin
3   Mechanic
4   Admin
5   Admin
6   Mechanic
7   Driver
8   Mechanic
9   Admin
10  Driver
11  Admin
12  Driver
13  Admin
14  Mechanic
15  Mechanic
查询

SELECT role.idrole, employee.*, role.role 
FROM employee 
INNER JOIN role 
ON idrole=idemployee 
WHERE role.role="Driver" 
AND employee.gender="Female";
此查询返回161行女性驱动程序

7   7   Katalin Coverly     Female  Driver
26  26  Jenilee Soeiro      Female  Driver
34  34  Rachel  Tourner     Female  Driver
46  46  Joanne  McCallister Female  Driver
47  47  Maure   Wingrove    Female  Driver
63  63  Bettina Mattecot    Female  Driver
74  74  Nelle   MacRierie   Female  Driver
77  77  Elsinore    Milius  Female  Driver
80  80  Emalia  Hellewell   Female  Driver
82  82  Kerianne    Pirkis  Female  Driver
95  95  Teena   Pesak       Female  Driver
99  99  Harriot Seyffert    Female  Driver
我需要一种方法将此查询中的每2名女性驾驶员分配给一个团队(例如,第1行和第2行在团队a、第3行和第4行团队B中,以此类推)


任何信息或建议都将不胜感激。

如果您在您的工作台版本中运行MySQL 8,那么您可以使用
行号()
生成一个团队号,将行号除以2,将两个人分配给一个团队:

SELECT r.role, e.*,
       (ROW_NUMBER() OVER (ORDER BY idemployee) + 1) DIV 2 AS Team
FROM employee e
JOIN role r ON r.id = e.idrole
WHERE r.role = 'Driver' AND e.gender = 'Female'
输出(基于问题中的数据):

请注意,在我的演示中,我使用
id
role
列对您的
role
表进行了适当的规范化修改;并在employee表中使用外键(
idrole
)来引用
角色
表中的
id
。所以
role
看起来是这样的:

id  role
1   Mechanic
2   Admin
3   Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;

从上面的输出可以看出,所有驱动程序都有
idrole=3

如果您在工作台版本中运行MySQL 8,那么您可以使用
ROW_NUMBER()
生成一个团队编号,将行编号除以2,为一个团队分配两个人:

SELECT r.role, e.*,
       (ROW_NUMBER() OVER (ORDER BY idemployee) + 1) DIV 2 AS Team
FROM employee e
JOIN role r ON r.id = e.idrole
WHERE r.role = 'Driver' AND e.gender = 'Female'
输出(基于问题中的数据):

请注意,在我的演示中,我使用
id
role
列对您的
role
表进行了适当的规范化修改;并在employee表中使用外键(
idrole
)来引用
角色
表中的
id
。所以
role
看起来是这样的:

id  role
1   Mechanic
2   Admin
3   Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;

从上面的输出可以看出,所有驱动程序都有
idrole=3

您只需设置一个变量并向SELECT语句中添加一个计算即可。大概是这样的:

id  role
1   Mechanic
2   Admin
3   Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;

您只需设置一个变量并向SELECT语句中添加一个计算,就可以做到这一点。大概是这样的:

id  role
1   Mechanic
2   Admin
3   Driver
SET @var=64;
SELECT field1, ...,
CONCAT('Team-', CHAR(ROUND(@var:=@var+.5))) AS Team
FROM table_name;

请分享一些示例数据和预期输出(格式文本)。@Honeybager Hi我已经编辑了原始问题。任何两个驱动程序是否可以在任何团队/随机选择中,或者是按照驱动程序的顺序,还是需要将驱动程序分配给特定的团队?如果该查询是真的,我认为您的设计有问题。为什么
idrole=ideemployee
?我希望表
role
中有一行
role='Driver'
,所有作为驱动程序的员工都指向该记录。@Felix是的,一个团队只需要两名女性驱动程序,驱动程序可以更改团队,但任何团队都必须有两名女性驱动程序请共享一些示例数据和预期输出(格式文本)@HoneyBadger Hi我已经编辑了原始问题。任何2名驾驶员是否可以在任何团队/随机选择中,或者是按照驾驶员的顺序,还是需要将驾驶员分配到特定的团队?如果该查询是真的,我认为您的设计中存在错误。为什么
idrole=ideemployee
?我希望表
role
中有一行
role='Driver'
,并且所有作为驱动程序的员工都指向该记录。@Felix是的,一个团队只需要两名女性驱动程序,驱动程序可以更换团队,但任何团队都必须有两名女性驱动程序