中国站长资讯网,打造最实用的网站资讯平台
我要投稿 交流论坛用户登陆 用户注册
您现在正在浏览:站长网数据库ACCESS → 正文

ACCESS中不支持多个left join解决方案

作者:佚名 时间:2008-05-06 来源:网络

access数据库做外连接时,发现Access不支持两个以上的 left join 在网上查一下,有哥们说每个 left join 要加 ()
   在修改之前(不能执行,ms sql 里执行以通过)
       select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes1, table3.fildes2  from
table1 left join table2 on table1.fildes1= table2.fildes1 left join table3 on  table1.fildes1= table3.fildes1
 修改之后(执行通过)  每个 left join 要加 ()
       select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes1, table3.fildes2  from
((table1 left join table2 on table1.fildes1= table2.fildes1) left join table3 on  table1.fildes1= table3.fildes1

        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...

文章评论

共有位WEB网友发表了评论 查看完整内容

特别推荐

24小时热门信息

新闻排行榜