我有两个表,第一部分的结构部分概括,迭代第二个结构:
table1 (id, i, j, k, a, b, c, x, y, z) -- requests
table2 (id, a, b, c, d) -- essential elements / bank subjects
我需要使用给定ID从table1
插入table2
条记录。
这样做的最佳方法是什么?
我有两个想法:
1:
DECLARE @a type, @b type, @c type
SELECT @a = a, @b = b, @c = c, FROM table2 WHERE id = @id
INSERT INTO table1 (i, j, k, a, b, c, x, y, z)
VALUES (@i, @j, @k, @a, @b, @c, @x, @y, @z)
2:
CREATE TABLE #result (a type, b type, c type)
SELECT a, b, c INTO #result FROM table2 WHERE id = @id
INSERT INTO table1 (i, j, k, a, b, c, x, y, z)
VALUES (@i, @j, @k,
(SELECT a FROM #result),
(SELECT b FROM #result),
(SELECT c FROM #result),
@x, @y, @z)
还有另一种方法吗?哪一个是最好的做法?
答案 0 :(得分:6)
我会这样做:
INSERT INTO table1 (i, j, k, a, b, c, d, x, y ,z)
Select @i, @j @k, a, b, c, d, @x, @y, @z
From table2
Where id = @id
这样可以避免将数据导入局部变量和/或临时表。表现应该更好。
要实现的重要部分是您可以在选择中硬编码值。列出列的顺序(插入行)必须与列出选择行中列的顺序相匹配。
答案 1 :(得分:2)
您可以使用单个插入查询来执行此操作:
insert into table1 (a, b, c, d, x, y, z)
select a, b, c, d, @x, @y, @z
from table2
where id = @id
编辑:
使用您添加的额外字段将是:
insert into table1 (i, j, k, a, b, c, x, y, z)
select @i, @j, @k, a, b, c, @x, @y, @z
from table2
where id = @id
答案 2 :(得分:1)
如果您在识别插入的数据时遇到问题,那么临时表可能会在开发过程中获益。如果您需要执行“需要”游标循环记录的其他数据更改,它也可能很有用。
否则,添加字段时,只需要更新代码的另一部分。
答案 3 :(得分:-2)
您可以使用MySQL GUI工具,但我不知道是否可以这样做。 http://dev.mysql.com/downloads/gui-tools/5.0.html