如何将MySQL数据合并到一个表中

朋友

我有3张桌子。

  1. 一个用户表,仅包含一个ID和一个名称。
  2. 一个学生表,其中包含ID,名称和主题。
  3. 一个students_enrolled表,现在为空。

我想从“用户”表中查找与“学生”表中具有匹配项的所有表条目。为此,我有以下查询:

SELECT  *
FROM    students
WHERE   name  IN (SELECT name FROM users);

QUERY RESULTS:

id  name
3   mark
4   steve

这可行,但是现在目标是使用此数据来伪造第三个表(“ students_enrolled”),并使ID与users表匹配。在用户表中,“标记”是ID 3,在“史蒂夫”中是ID 4,但在学生表中,它们分别是ID 50和99。我想将它们插入到“ students_enrolled”表中,并将其与用户表的ID相匹配。注意:“名称”将始终是唯一的-在一个表中永远不会有两个史蒂夫

The goal is to have the 'students_enrolled' table show this:

id  name    status  subject
3   mark    enrolled    math
4   steve   enrolled    reading

如果有人在这里有任何想法,我已经用所有模式和数据创建了一个sqlfiddle:

[指向架构和数据的sql小提琴链接:http : //sqlfiddle.com/#!9 / c5ea5/1][1]

Schema:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `users` (`id`, `name`)
VALUES
    (1, 'john'),
    (2, 'jane'),
    (3, 'mark'),
    (4, 'steve');

-- ----------------

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;


INSERT INTO `students` (`id`, `name`, `subject`)
VALUES
    (50, 'mark', 'math'),
    (99, 'steve', 'reading');


-- ----------------

CREATE TABLE `students_enrolled` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `status` varchar(255) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;


/* Desired result:*/
/* INSERT INTO `students_enrolled` (`id`, `name`, `status`, `subject`)
VALUES
    (3, 'mark', 'enrolled', 'math'),
    (4, 'steve', 'enrolled', 'reading'); */

-- ----------------

谢谢您的帮助!

乔治·贝索斯(Giorgos Betsos)

您可以使用一条INSERT ... SELECT语句进行插入:

INSERT INTO `students_enrolled` (`id`, `name`, `status`, `subject`)
SELECT u.`id`, s.`name`, 'enrolled', s.`subject`
FROM `students` AS s
INNER JOIN `users` AS u ON s.`name` = u.`name`

您可以users.id使用来获取实地信息INNER JOIN

演示在这里

编辑:

您可以使用以下方法过滤掉students_enrolled表中已经存在的记录NOT EXISTS

INSERT INTO `students_enrolled` (`id`, `name`, `status`, `subject`)
SELECT u.`id`, s.`name`, 'enrolled', s.`subject`
FROM `students` AS s
INNER JOIN `users` AS u ON s.`name` = u.`name`
WHERE NOT EXISTS (SELECT 1 
                  FROM `students_enrolled` AS se
                  WHERE se.`id` = u.`id`);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将两个 SQL 表的数据合并到一个新的 SQL 表中?

如何将五个表合并到一个表中?

如何将两个LINQ数据源合并到一个图表的单个表中?

如何将具有重复值的一个表中的数据合并到单行中?

如何将多个数据框合并到一个表中并导出到Excel?

如何将两个表列合并到SQL Server中的一个表

如何将两个选定的列合并到一个表中?

如何将两个不同的查询合并到一个表中?

如何将 Pandas DataFrame 中的数据与多索引合并到一个列表中

如何将2条SQL语句合并到一个表中

使用glob后如何将数据帧合并到一个csv文件中?

如何将2组数据合并到一个UITableview中

如何将两个sql表中的行和列合并到一个表中

如何将一个模型的数据合并到另一个模型中?

如何将不同的excel数据表合并到一个表但不同的列中?

如何将一个提交合并到一个较早的提交中?

如何将各种csv文件中的数据合并到python中的一个csv文件中?

如何将3个不同表中具有唯一ID的结果合并到mysql中

如何将两个嵌套的MySQL查询合并到一个视图中?

将两个表中的数据合并到一个输出SQL中

来自多个临时表的数据将合并到一个临时表中

将两个表中的数据合并到一个视图中

如何将一个Numpy数组合并到多个数据帧

如何将这3个SQL作业合并到一个SSIS包中?

如何将2个列表合并到一个球拍中

如何将两个查询合并到一个子查询中

如何将 2 个编辑 scipts 合并到一个 Google 表格中

如何将两个列表合并到一个交替元素中

将多个表中的数据合并到一个列中