MySQL - 如何根据条件将值从一个表传输到另一个表

时间:2015-09-10 22:31:43

标签: mysql

我想根据比较ba的条件,从表a中插入表b值。

例如,让a成为此student表:

╔═════╦═══════╦══════╗
║ id* ║ name  ║ age  ║
╠═════╬═══════╬══════╣
║  1  ║ John  ║  12  ║
║  2  ║ Sam   ║  14  ║
╚═════╩═══════╩══════╝

b成为grade表:

╔═════╦═══════╗
║ id  ║ name  ║
╠═════╬═══════╣
║  ?  ║ John  ║
║  ?  ║ Sam   ║
╚═════╩═══════╝

我认为语法可能如下所示:

INSERT INTO grade.id
  SELECT id FROM student
  WHERE grade.name = student.name;

输出表应为:

╔═════╦═══════╗
║ id  ║ name  ║
╠═════╬═══════╣
║  1  ║ John  ║
║  2  ║ Sam   ║
╚═════╩═══════╝

我收到grade.id不是表的错误,这是有道理的。但我不确定如何做我想做的事。

抱歉这个人为的例子。真正的表格要复杂得多。基本上,如果某些条件匹配,我想将某些值从一个表复制到另一个表。

1 个答案:

答案 0 :(得分:1)

暂时忽略您可能违反数据库规范化的事实,您几乎得到了答案(您也可以find in the manual

INSERT INTO grade (id,name)
SELECT id,name FROM student
;

插入会添加不会更改的行。为此,您需要更新或替换。

Update grade
Set id=( select id from student
      WHERE grade.name = student.name);

顺便说一句,如果student.name不是唯一的,这将会中断。