zoukankan      html  css  js  c++  java
  • ACCESS中不支持FULL JOIN的解决方案

          今天做了个视图,JOIN了两张表,要求除了INNER JOIN的记录,还要两张表的其他未选取的记录,所以偶就想到了FULL JION。试了一下ACCESS居然不支持,狂郁闷啊!!

           到网上差了一下有哥们说先LEFT JOIN,再RIGHT JOIN最后再UNION ALL一下(两个表结构要相同)。思路是对的,不过他的两张表都是SELECT *的,所以是可以的,可是我两张表都要选取部分字段的,结果出现了INNER JOIN外的记录有部分没有取到值。不知道这样描述各位是否能看懂,举个例子吧:

    (SELECT T1.A,TI.B FROM TI LEFT JOIN T2 ON (TI.C=T2.C))
    UNION ALL
    (SELECT T1.A,TI.B FROM TI RIGHT JOIN T2 ON (TI.C=T2.C))

    这样去除的记录有部分A和B字段是没有值的,为什么呢?
           LEFTJOIN 和 RIGHT JOIN 的时候一定要注意表和字段的对应,一般来说LEFTJOIN的值取自前一个表(T1),RIGHT JOIN 的值取自后一个表(T2)。所以语句要改成这样:

    (SELECT T1.A,TI.B FROM TI LEFT JOIN T2 ON (TI.C=T2.C))
    UNION ALL
    (SELECT T2.A,T2.B FROM TI RIGHT JOIN T2 ON (TI.C=T2.C))

    这样的查询还是有问题的,当存在INNER JOIN时,因为是UNION ALL的所以会有重复记录的
    最彻底的解决是把上述语句保存成视图(VIEW),调用时DISTINCT一下,就可以了

           呵呵, 实现了和FULL JOIN一样的效果,o(∩_∩)o...

    补充:如果大家想直接剔除重复记录的话,可以把UNION ALL 换成UNION,这样做UNION的效率没有UNION ALL高(因为UNION操作后,要删除重复记录、排序等操作),就不用再DISTINCT了,呵呵!!

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    字典的两种访问方式
    python列表
    字符串基础操作
    C#解leetcode 11. Container With Most Water
    c# hasvalue属性
    C#解leetcode 238. Product of Array Except Self
    win7/win8 64位系统注册TeeChart8.ocx 控件---以及dllregisterserver调用失败问题解决办法
    C#解leetcode 219. Contains Duplicate II
    转载:C# HashSet 用法
    C#解leetcode:119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/Athrun/p/1269145.html
Copyright © 2011-2022 走看看