设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3280|回复: 8
打印 上一主题 下一主题

[查询] LEFT JOIN 用法一点心得

[复制链接]
跳转到指定楼层
1#
发表于 2008-11-26 20:47:57 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
LEFT JOIN 懂一点SQL语法的人都不会陌生,也没什么好写的,网上相关的语法书一大堆

最近,在做LEFT JOIN一个查询时,却怎么都查询不了自已想要的数据,真是奇怪透了。

在应用中,要把订单的结余数量统计出来,看看那些订单已经OK ,用LEFT JOIN是个不错的选择,为了方便理解,这里分开几个查询实现:

订单查询:

  SELECT 订单表.OrderNo, 订单表.CPBH, Sum(订单表.SL) AS 订单总数 FROM 订单表 GROUP BY 订单表.OrderNo, 订单表.CPBH;

收货查询:

SELECT 送货表.OrderNO, 送货表.CPBH, Sum(送货表.SL) AS 收货总数 FROM 送货表 GROUP BY 送货表.CPBH, 送货表.OrderNO;

用LEFT JOIN 把订单结存数列出来

SELECT 订单查询.OrderNo, 订单查询.CPBH, 订单查询.订单总数, 收货查询.收货总数, (nz(订单查询.订单总数)-nz(收货查询.收货总数)) AS 结余订单数
FROM 订单查询 LEFT JOIN 收货查询 ON (订单查询.CPBH=收货查询.CPBH) AND (订单查询.OrderNo=收货查询.OrderNO);




出来的结果却不是我想要的

改成 INNER JOIN 方式
SELECT 订单查询.OrderNo, 订单查询.CPBH, 订单查询.订单总数, 收货查询.收货总数, (nz(订单查询.订单总数)-nz(收货查询.收货总数)) AS 结余订单数
FROM 订单查询 INNER JOIN 收货查询 ON (订单查询.OrderNo = 收货查询.OrderNO) AND (订单查询.CPBH = 收货查询.CPBH);

收货总数能正常显示




为什么INNER JOIN可以正常显示收货总数,而LEFT JOIN不能显示呢 ,不知大家发现问题没有

唉,弄了一个下午,总算搞清楚什么回事,LEFT JOIN 后面查询语句,如果是分组查询的,GROUP BY 的排序顺序必须和SELECT 的一致

把收货查询:

SELECT 送货表.OrderNO, 送货表.CPBH, Sum(送货表.SL) AS 收货总数 FROM 送货表 GROUP BY 送货表.CPBH, 送货表.OrderNO;


改为:
SELECT 送货表.OrderNO, 送货表.CPBH, Sum(送货表.SL) AS 收货总数 FROM 送货表 GROUP BY  送货表.OrderNO,送货表.CPBH

执行LEFT JOIN 一切正常

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
9#
发表于 2008-12-11 11:45:11 | 只看该作者
太谢谢了,我为了这个问题试了不知道多少次。看了楼主的介绍一试果然问题解决了。太谢谢了。
8#
发表于 2008-11-27 10:58:02 | 只看该作者
谢谢andymark

虽然之前没有遇到这种情况, andymark的经验给我们提供了一种解决问题的思路.
7#
发表于 2008-11-26 21:34:46 | 只看该作者
这里也顶一个

点击这里给我发消息

6#
发表于 2008-11-26 21:31:41 | 只看该作者
留个名,,以后有用
5#
发表于 2008-11-26 21:29:35 | 只看该作者
谢谢分享!!

点击这里给我发消息

4#
发表于 2008-11-26 21:19:11 | 只看该作者
可能是Group by 就决定了表的排序方式, 如果是左外连接, 如果 右边没有对应的话,还要填补空值. 如果排序方式对应不起来, 就会错乱
3#
 楼主| 发表于 2008-11-26 20:57:57 | 只看该作者
还是不明白,为什么INNER JOIN GROUP BY 可以不必按顺序,而LEFT JOIN却不能

点击这里给我发消息

2#
发表于 2008-11-26 20:51:08 | 只看该作者
20%的问题常常会花了80%的时间,长了知识, 少了弯路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-10 01:18 , Processed in 0.093807 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表