现在的位置: 首页 > 综合 > 正文

MYSQL和MSSQL多表合并INSERT ON DUPLICATE KEY-MERGE INTO

2017年12月26日 ⁄ 综合 ⁄ 共 632字 ⁄ 字号 评论关闭

导读:最近的一次数据计算中,需要对多长日志表以uid为主键进行uid一个属性(分值)进行合并。一直对mysql比较熟悉,而sql server就生疏了。完成工作后,记录笔记。

详细:

有以下结构的表(mysql、sql server通用)

+---uid---+---is_login_today---+

每天都会记录登陆了某应用的用户。现在需要对从月初到现在的已经登陆过的用户做统计。

解决方案就是合并这几张表,

A 在mysql下是比较熟悉的。使用

INSERT INTO target_tbl (uid, is_login_today)
    SELECT uid, is_login_today 
    FROM log_tbl
ON DUPLICATE KEY 
    UPDATE is_login_today=VALUES(is_login_today)

但是,这一方案在mysql官方文档中,被认为是不安全的。详见
这里

在版本5.5.28下正常使用。

B 在sql server下,使用MERGE IN 句子:

MERGE INTO targetTbl AS T
USING sourceTbl AS S 
ON T.uid=S.uid
WHEN MATCHED
THEN SET is_login_today = S.is_login_today
WHEN NOT MATCHED
THEN INSERT VALUES(S.uid, S.is_login)_today

不过要说明的是,这里只可以关联一张表,及S每次只能是一张表。

我总觉得,还有很多遗漏的注意事项。知晓后再来补上吧。

抱歉!评论已关闭.