我正在通过向现有列中添加数据来更新现有的表。
我已经有了要插入的数据的输出,但是由于记录的数量,我正在寻找最好的方法将其插入到我的表中,而不必手动写入每一行sql。
这是我想插入的sql (部分)
INSERT INTO `tbl_user_variables_dobRE` (`user_id`, `value`) VALUES
(150, '1959-11-02'),
(151, '1948-04-20'),
(152, '1961-06-18'),这是我想把它插入的桌子
id | 7
username | guestinvite
password | BLANK
forname | forname
surname | surname
email | guestinvite@test.com
address_id | 286
type_id | 4
dob | 0000-00-00
plusGuest | 0
update | 2016-02-16 11:54:36
created | 2016-04-04 17:03:12因此,我想在‘道布’列中插入第二个条目,其中第一个条目= id
是否存在以编程方式执行此操作的方法,还是必须为每一行编写WHERE & or语句?
发布于 2016-09-09 15:19:53
在您的帖子中标记了MySql和server。下面假设您使用的是Server,但是在MySQL (只是不同的语法).中,这个想法将保持不变
如果我的理解是正确的,听起来您想要做一个UPDATE,而不是INSERT,因为您正在修改现有的行。
您说过要插入数据的输出--将其插入临时表并将其连接到要更新的id匹配的表中。
BEGIN TRANSACTION [Transaction1] -- Do large updates as transactions to avoid data loss
CREATE TABLE #temp ( -- Create temp table
[user_id] int,
[dob] nvarchar(20)
)
INSERT INTO #temp
-- YOUR SELECT GOES HERE
SELECT my_id as [user_id], my_dob as [dob]
UPDATE my_table
SET my_table.dob = t.dob
FROM tbl_user_variables_dobRE my_table
INNER JOIN #temp t ON t.user_id = my_table.id
DROP TABLE #temp如果您的数据看起来不错,提交事务:(不要停留太久,事务锁表数据!)
COMMIT TRANSACTION [Transaction1],否则:
ROLLBACK TRANSACTION [Transaction1]发布于 2016-09-09 15:17:26
我能想到的最快的方法是创建一个临时表,其中包含您想要添加的新数据(您可以从CSV文件中大量导入这些数据)。
临时表只需要几个列--一列带有user_id,另一列带有dob --不管怎么说,您都会处理掉它。
然后你可以做这样的事情:
UPDATE tbl_user_variables_dobRE a
JOIN tmp_table b
ON ( a.user_id = b.user_id )
SET a.dob = b.dob一旦你这样做了,你可以DROP你的临时桌子,并成为好的去-祝好运!
重要
在更新数据时要非常小心--忘记添加一个子句很容易弄乱您的数据。如果可能的话,在使用实际的生产数据之前,先用一些测试数据来做这件事。
https://stackoverflow.com/questions/39414579
复制相似问题