美文网首页
SQL将两个表按某相同记录列合并

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

作者: 李彪_哈工大 | 来源:发表于2017-08-11 11:17 被阅读0次

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

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

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

    表A 表B

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


    想得到的结果表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   
     --但在此处这样一个本应该出错的未知字段因为语法的不严格,判断相等,被解析为赋值而结果出错
    
    结果错误,共36行,是A和B的乘积

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

    SELECT * 
    FROM #A
    LEFT JOIN #B
    ON #A.Starting_timestamp = #B.Starting_timestamp
    
    结果错误,timestamp列出现两次

    相关文章

      网友评论

          本文标题:SQL将两个表按某相同记录列合并

          本文链接:https://www.haomeiwen.com/subject/owjlrxtx.html