如何将数据插入MySQL表?

时间:2015-10-02 17:26:43

标签: mysql insert

我有3张桌子。

  
      
  1. 只有id和名称的用户表。
  2.   
  3. 带有身份证,姓名和主题的学生表。
  4.   
  5. student_enrolled表,现在为空。
  6.   

我想找到来自'用户'的所有表格条目在“学生”中有匹配的表格。表。为此,我有以下查询:

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'); */

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

2 个答案:

答案 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`;

干杯!