导读:最近的一次数据计算中,需要对多长日志表以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每次只能是一张表。
我总觉得,还有很多遗漏的注意事项。知晓后再来补上吧。