SQL将两个表按某相同记录列合并

最近在学习SQL语言,不得不说,数据库很强大,操作速度非常快,但语言实在是有些别扭,规范性差且语法不完善。怪不得它叫查询语句,不叫语言。整体学习下来,SQL语言是一个缝缝补补的结果,写起来非常不轻松。同时SQL server的帮助和语言操作能力很差,不利于编程。总之,非常快,非常有用,但非常不好用!

正好遇到这样一个问题,无数次试错后终于得到解决,用来说明以上观点。

有两个表,A和B,两表数据分别如下

《SQL将两个表按某相同记录列合并》 表A
《SQL将两个表按某相同记录列合并》 表B

操作目的是将两表合并,得到表C,特点是以临时表#A、#B共有的Starting_Timestamp列为关键字进行合并,得到结果C

《SQL将两个表按某相同记录列合并》 想得到的结果表C

参考博客http://bbs.csdn.net/topics/370140339得到的准确结果

正确的语法为

SELECT a.Starting_Timestamp, Un3_Avg, Uw3_Avg, RH3_Avg
FROM #A a
LEFT JOIN  #B
ON a.Starting_timestamp = #B.Starting_timestamp

--或完整写法

SELECT e.Starting_Timestamp, Un3_Avg, Uw3_Avg, RH3_Avg
FROM #A 
LEFT JOIN
(SELECT Starting_timestamp, RH3_Avg FROM #B) 
ON #A.Starting_timestamp = #B.Starting_timestamp

关键点是在SELECT的变量描述中描述结果列出的所有记录名,使用LEFT JOIN连接两个表,而非如下检索语句。

SELECT * FROM #A e
LEFT JOIN
(SELECT RH3_Avg FROM #B) f    
--这个方法主要问题出在此处的SELECT上,查询得到的新表并没有包含关键字字段
ON e.Starting_timestamp = Starting_timestamp   
 --但在此处这样一个本应该出错的未知字段因为语法的不严格,判断相等,被解析为赋值而结果出错

《SQL将两个表按某相同记录列合并》 结果错误,共36行,是A和B的乘积

若没有在SELECT中描述准确的结果,则会有如下结果

SELECT * 
FROM #A
LEFT JOIN #B
ON #A.Starting_timestamp = #B.Starting_timestamp

《SQL将两个表按某相同记录列合并》 结果错误,timestamp列出现两次

    原文作者:李彪_哈工大
    原文地址: https://www.jianshu.com/p/081c6ae50ae5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞