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