我想根据比较b
到a
的条件,从表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
不是表的错误,这是有道理的。但我不确定如何做我想做的事。
抱歉这个人为的例子。真正的表格要复杂得多。基本上,如果某些条件匹配,我想将某些值从一个表复制到另一个表。
答案 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不是唯一的,这将会中断。