SQL语句问题求助:迁移wa_research数据至wa_list并更新字段
搞定SQL记录迁移与日期更新问题
嘿,我来帮你梳理下这个需求,咱们一步步解决它!你的目标是把wa_research里符合条件的记录迁去wa_list,同时给这些迁走的记录打上今日的日期标记对吧?
先明确核心需求
- 把
wa_research中waID != 0且满足CIK相关条件的记录,插入到正式表wa_list - 同时将这些被迁移的记录的
updated字段,更新为MM-DD-YYYY格式的今日日期
完整实现方案(分数据库版本)
首先要注意:插入和更新是关联操作,最好放在事务里,避免出现“记录迁走了但日期没更新”的尴尬情况。
MySQL/MariaDB 版本
START TRANSACTION; -- 第一步:迁移符合条件的记录到正式表 INSERT INTO `wa_list` (exchange, symbol, security_name) SELECT A.exchange, A.symbol, A.security_name FROM `wa_research` A WHERE A.waID != 0 AND A.CIK IS NOT NULL; -- 这里补全你没写完的CIK条件,比如非空/特定值 -- 第二步:给刚迁移的记录更新今日日期 UPDATE `wa_research` SET updated = DATE_FORMAT(CURDATE(), '%m-%d-%Y') WHERE waID != 0 AND CIK IS NOT NULL; -- 必须和上面的WHERE条件完全一致! COMMIT;
SQL Server 版本
BEGIN TRANSACTION; -- 迁移数据 INSERT INTO wa_list (exchange, symbol, security_name) SELECT A.exchange, A.symbol, A.security_name FROM wa_research A WHERE A.waID != 0 AND A.CIK IS NOT NULL; -- 更新日期字段 UPDATE wa_research SET updated = FORMAT(GETDATE(), 'MM-dd-yyyy') WHERE waID != 0 AND CIK IS NOT NULL; COMMIT TRANSACTION;
Oracle 版本
BEGIN -- 执行迁移 INSERT INTO wa_list (exchange, symbol, security_name) SELECT A.exchange, A.symbol, A.security_name FROM wa_research A WHERE A.waID != 0 AND A.CIK IS NOT NULL; -- 更新日期标记 UPDATE wa_research SET updated = TO_CHAR(SYSDATE, 'MM-DD-YYYY') WHERE waID != 0 AND CIK IS NOT NULL; COMMIT; END; /
几个关键提醒
- 条件要完全匹配:INSERT和UPDATE的WHERE条件必须一模一样,不然会出现“迁了A记录却更新了B记录”的错误
- 一定要用事务:如果不包事务,万一插入成功但更新失败,数据状态就乱了——正式表多了记录,临时表的日期却没更新
- 日期函数选对:不同数据库的日期格式化函数不一样,别搞混了!比如MySQL用
DATE_FORMAT,SQL Server用FORMAT,Oracle用TO_CHAR - 大数据量优化:如果
wa_research数据很多,记得给waID和CIK加索引,不然查询和更新会很慢
内容的提问来源于stack exchange,提问作者BCH
相关产品推荐
相关产品推荐

