我有3张桌子。
- 只有id和名称的用户表。
- 带有身份证,姓名和主题的学生表。
- student_enrolled表,现在为空。
醇>
我想找到来自'用户'的所有表格条目在“学生”中有匹配的表格。表。为此,我有以下查询:
SELECT *
FROM students
WHERE name IN (SELECT name FROM users);
QUERY RESULTS:
id name
3 mark
4 steve
这样可行,但现在目标是傀儡第三桌 (' students_enrolled')使用此数据并使ID与用户匹配 表。
在用户表格中标记'是ID 3和'史蒂夫'是ID 4,但在 学生表分别为50和99。我想插入 他们进入了'student_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 Fiddle Link] [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'); */
-- ----------------
答案 0 :(得分:1)
使用INSERT INTO .. SELECT FROM
构建
INSERT INTO students_enrolled (name,subject)
SELECT s.name, s.subject
FROM students s
JOIN users u ON s.name = u.name;
答案 1 :(得分:0)
这是一个完全有效的查询:
INSERT IGNORE 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`;
SELECT *
FROM `students_enrolled`;
干杯!