大家好!问个问题,我在sqs server2005中查询一个视图的数据,视图是两个数据库表中的数据
SQL语句类似:
select * from
m left outer join
(select a, b,c
from n)n
on m.a=n.a
其中有很多left outer join
现在就是每次查询的时候,数据有出入,有时一致有时不一致。请问大家有什么办法解决这个问题?

解决方案 »

  1.   

    每次查询的条件是一样的,但是不在一台机器上进行的查询。视图的作用是把两个数据库中的数据union,也就是把历史数据和现在发生的数据加在一起。
      

  2.   

    关键在 left outer join 这里,要看你的试图怎么写的,还有你的查询条件是什么,才能确定问题所在。
      

  3.   

     我的sql语句在我的“程序问题”贴里,大家有兴趣可以看看,很长
      

  4.   

    http://topic.csdn.net/u/20080515/16/66389f93-5152-4a72-9535-f8be66a27ffd.html
      

  5.   

    select a.str_crm_dir,a.str_dir_name as str_dir_name,
     sum(-d.d_money) as xse,
     sum(-d.d_money)-sum(d.d_costing_price*(-d.n_amount)) as ml,
    (sum(-d.d_money)-sum(d.d_costing_price*(-d.n_amount)))/case sum( -d.d_money)when 0 then 1 else sum( -d.d_money) end as mll
         from v_account_stockintrade c (NoLock)
         inner join v_account_stockintrade_detail d (NoLock) on c.n_stockaccount_id=d.n_stockaccount_id
         inner join t_account_dir e (NoLock) on e.n_account_id=d.n_account_id
         inner join t_crm_customers b (NoLock) on b.n_crm_id=c.n_crm_id
         inner join t_CRM_DIR a (NoLock) on left(b.str_crm_dir,11)=a.str_crm_dir
         where c.dt_chalkup between @dateup and @dateend
               and a.str_crm_dir like '__.__.__.__%'
               and c.str_operate_code in('006','106','606')
               group by a.str_crm_dir,a.str_dir_name 大概看了一下,
    写的太复杂了,
    没有比较,
    你后面几个join都是个这个类似的,
    建议你把这几个表做个视图,然后在从这个视图中组做相应的聚合,
    像这几个都有的共同条件,
    可以在视图中完成,
               and a.str_crm_dir like '__.__.__.__%'
               and c.str_operate_code in('006','106','606')
    一是,这样代码更简洁,
    二是,逻辑更清楚一些,好分析.
    ---------
    第二点可以优化的是,如果上述视图创建好后,
    可以根据该视图一次性把后面几个总计,采购调拨,营销中心 .... 所有的汇总关系通过一次join就可以实现,
    而不是像现在的多次join.
    使用 sum + case when 就可以实现不同的聚合,
      

  6.   

    刚刚看了楼主的原来哪个帖子,头变的很大很大。
    left outer join这块的原因吧。
    使用左外连接以后,如果查询的时候使用到右边表的列的时候,很有可能出现楼主所说的问题哈。
      

  7.   

    用left join 數據有出入表示where 條件或者 on 的條件不對。
    left join 太多速度會很慢喲