LEFT JOIN 用法一点心得-andymark
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> ADP及SQL SERVER


LEFT JOIN 用法一点心得

发表时间:2008/11/29 8:43:30 评论(2) 浏览(19975)  评论 | 加入收藏 | 复制
   
摘 要:LEFT JOIN 用法一点心得
正 文:

LEFT JOIN 用法一点心得

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 一切正常

Access软件网交流QQ群(群号:198465573)
 
 相关文章
[分享]关于Left和Left$ 等的区别  【海狸先生  2005/8/10】
深入浅出SQL之左连接、右连接和全连接  【UMVSOFT整理  2008/2/16】
SQL--JOIN之完全用法  【UMVSOFT整理  2008/4/21】
[access查询]Left(),Mid(),Right()和Re...  【caoguangyao  2009/4/26】
access中LEFT函数未定义的解决方案\表达式中'left'函...  【麥田  2012/7/3】
常见问答
技术分类
相关资源
文章搜索
关于作者

andymark

文章分类

文章存档

友情链接