MySQL中用另一表GROUP BY结果更新/插入空表t1的uid列
哦,我明白你的问题了——你的t1是空表,用UPDATE语句当然没效果啦,因为UPDATE是用来修改已经存在的行的,空表根本没有可更新的记录呀!
问题分析
你之前执行的UPDATE JOIN语句失效的核心原因:t1没有任何行数据,UPDATE操作只能针对已存在的记录进行修改,JOIN后找不到匹配的行,所以不会产生任何数据变化。
解决方案
根据你的需求(把t2按uid分组后的结果处理到t1的uid列),分两种场景给出对应方案:
场景1:t1是空表,仅需插入去重后的uid
直接用INSERT INTO ... SELECT语句,把t2分组去重后的uid批量插入到t1中:
INSERT INTO t1 (uid) SELECT uid FROM t2 GROUP BY uid;
这条语句会把t2中去重后的1114732条uid数据全部插入到t1的uid列里,完全匹配你的需求。
场景2:t1可能已有数据,需要插入新uid+更新已有uid(可选)
如果后续t1可能存在重复的uid,你需要实现“存在则更新,不存在则插入”的逻辑,这时候需要先给t1的uid列添加唯一约束(主键或唯一索引),然后用INSERT ... ON DUPLICATE KEY UPDATE语法:
-- 先给t1的uid列加唯一索引(如果还没有的话) ALTER TABLE t1 ADD UNIQUE INDEX idx_uid (uid); -- 插入或更新 INSERT INTO t1 (uid) SELECT uid FROM t2 GROUP BY uid ON DUPLICATE KEY UPDATE uid = VALUES(uid); -- 如果uid已存在,这里更新操作其实无变化,仅避免报错
如果t1还有其他字段需要更新(比如最后更新时间),可以把更新语句改成对应字段,比如:
ON DUPLICATE KEY UPDATE last_update = NOW();
内容的提问来源于stack exchange,提问作者Wasid Hossain
相关产品推荐
相关产品推荐

