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

来源:互联网 发布:windows未激活 黑屏 编辑:程序博客网 时间:2024/06/01 08:27

导读:最近的一次数据计算中,需要对多长日志表以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_tblON DUPLICATE KEY     UPDATE is_login_today=VALUES(is_login_today)
但是,这一方案在mysql官方文档中,被认为是不安全的。详见 这里
在版本5.5.28下正常使用。

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

MERGE INTO targetTbl AS TUSING sourceTbl AS S ON T.uid=S.uidWHEN MATCHEDTHEN SET is_login_today = S.is_login_todayWHEN NOT MATCHEDTHEN INSERT VALUES(S.uid, S.is_login)_today
不过要说明的是,这里只可以关联一张表,及S每次只能是一张表。


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



原创粉丝点击