日期:2014-05-17  浏览次数:20414 次

right join 的奇怪现象
select  isnull(SUM(netPaid),0.00) from dbo.F_AccountEntry a 
                                        right join  dbo.RPT_resultA41 b
                                        on a.CompanyID=b.CompanyID 
                                        and a.AcctID=b.acctid 
                                        and b.CompanyID=1 and b.userName='sally_law' 
                                        and a.FiscalDateID>-13 and a.FiscalDateID<0
                                        group by b.acctid


如上语句,我的B表在and b.CompanyID=1 and b.userName='sally_law' 条件下 只有66条数据,
但这样出来的如果却有77条之多,什么原因呢,是我的语句有问题吗?

------解决方案--------------------
left join 应该是66条数据吧。right join 会出来一些右表有,但是左表空的数据。right join 查询出来的结果中 左表空的也会算作一条数据。
------解决方案--------------------
right/left join都会添加“额外行”,你如果用inner join那应该就只有66行了,应该考虑是否有必要用外联,而不是随便用。
------解决方案--------------------
语句是没有问题的,只有理解的问题
如果怀疑不对的,把条件写到where中去

------解决方案--------------------
引用:
刚才有事去忙了SQL code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546------------------------------ Author  :DBA_Huangzj(……

弱弱的问一句,最上面的那些注释是怎么弄出来的?
------解决方案--------------------

SELECT a.acctid,isnull(bb.closingAmtBase,0) closingAmtBase FROM a LEFT JOIN  (
SELECT SUM(closingAmtBase) closingAmtBase ,acctid,companyid FROM b
GROUP BY acctid,companyid
) bb  ON bb.companyid = a.companyid AND bb.acctid = a.acctid

81 9506.98
82 183207.21
83 0.00
84 0.00