Jon*_*han 21 mysql sql database
如何从插入选定行table_source到table_targetMySQL中,其中使用SQL:
id琐碎INSERT INTO table_target SELECT * FROM table_source无法在主键重复的条目.
Mar*_*c B 22
您可以在插入中列出所需的所有字段...选择,或者在外部使用其他内容为您构建列表.
SQL没有类似的东西SELECT * except somefield FROM,所以你必须咬紧牙关并写出字段名称.
Dev*_*art 19
必须指定列名称 -
INSERT INTO table_target SELECT NULL, column_name1, column_name2, column_name3, ...
FROM table_source;
Run Code Online (Sandbox Code Playgroud)
只需将NULL作为自动增量id字段的值传递.
当然,主键必须是唯一的。这取决于要实现的目标,但是可以排除具有主键的行。
INSERT INTO table_target SELECT * FROM table_source
WHERE table_source.id NOT IN (SELECT id FROM table_target)
Run Code Online (Sandbox Code Playgroud)
UPDATE:由于还需要额外的行,因此您应该首先解决冲突,table_source是否具有关系?如果没有,您可以更改这些键:
UPDATE table_source SET id = id + 1000
WHERE id IN (SELECT id FROM table_target)
Run Code Online (Sandbox Code Playgroud)
其中1000是一个常数,足够大,因此它们可以放在表末尾。
乏味但安全和正确。
在不提供列列表的情况下编写 INSERT 语句会导致代码难以调试,更重要的是,非常脆弱的代码会在表的定义发生更改时中断。
如果您绝对不能自己写出列名,那么在您的代码中构建一个工具来为您创建逗号分隔的列表相对容易。