SQL 语句如下:
select  isnull(count(x.bit_id),0) from  base_band x  join base_series y  on y.bit_bandid=x.bit_id  
join base_modal z on z.bit_seriesid=y.bit_id
join veh_vehicle veh on veh.bit_carmodel = z.bit_id 
join 
(select xs.bit_customer_id from VEH_SaleOrder xs 
union select jxs.bit_customerid from VEH_DealSellInfo jxs
) as hj
on hj.bit_customer_id=veh.bit_customer_id 我现在的问题是 其中 最后一个join 的子查询中的数据是应该是整个 查询结果的正确数据,但是 结果会多出 ,怎样让 最后一个join 之前的数据 和 子查询中的数据相吻合? 请高手帮忙!!

解决方案 »

  1.   

    表太多了,其实我只要 这个的查询结果 和 最后 一个join 的子查询 结果相同 就OK了 现在的结果是 比 子查询的结果要多出 几十条 !
      

  2.   

    SELECT ISNULL(COUNT(X.BIT_ID), 0)
      FROM BASE_BAND X
     INNER JOIN BASE_SERIES Y ON Y.BIT_BANDID = X.BIT_ID
     INNER JOIN BASE_MODAL Z ON Z.BIT_SERIESID = Y.BIT_ID
     INNER JOIN VEH_VEHICLE VEH ON VEH.BIT_CARMODEL = Z.BIT_ID
     INNER JOIN (SELECT XS.BIT_CUSTOMER_ID
                   FROM VEH_SALEORDER XS
                 UNION
                 SELECT JXS.BIT_CUSTOMERID FROM VEH_DEALSELLINFO JXS) AS HJ ON HJ.BIT_CUSTOMER_ID = VEH.BIT_CUSTOMER_ID
      

  3.   

    NekChan(骑蜗牛看星星)  你好,你的 执行结果还是 不对 数据还是多的 ,不过先谢谢 !不知道还有没有 别的办法?
      

  4.   

    select  isnull(count(x.bit_id),0) from  base_band x  
    inner join base_series y  on y.bit_bandid=x.bit_id  
    inner join base_modal z on z.bit_seriesid=y.bit_id
    inner join veh_vehicle veh on veh.bit_carmodel = z.bit_id 
    right join 
    (select xs.bit_customer_id from VEH_SaleOrder xs 
    union select jxs.bit_customerid from VEH_DealSellInfo jxs
    ) as hj
    on hj.bit_customer_id=veh.bit_customer_id
      

  5.   

    这是一个存储过程的其中一段代码 , 其实我只要 这个的查询结果 和 最后 一个join 的子查询 结果相同 就 现在的结果是 比 子查询的结果要多出 几十条 ! 
    left right inner exists 都试过了就是不对,但可能就是 顺序 和位置 有问题 不知道 我说的明白吗!
      

  6.   

    全部用inner join,不可能多出来吧?
      

  7.   

    create table #ta
    (
    [id] int not null
    )create table #tb
    (
    [id] int not null,
    [name] varchar(10)
    )insert into #ta values(1)
    insert into #ta values(1)
    insert into #ta values(2)
    insert into #ta values(2)insert into #tb values(2,'a')
    insert into #tb values(2,'b')select #tb.[name] from #ta join #tb on #ta.[id]=#tb.[id]
    drop table #ta
    drop table #tb对于#tb来说,它只有两条数据,但联合后的结果是四条,这不也是正常的吗
      

  8.   

    你可能没看明白我的意思,多出来的数据是 子查询中(ID) 不包含的数据 也就是我只需要两个表中ID同时在两个表中存在的数据 现在的情况是没有完全的过滤掉 !
      

  9.   

    我想你在select列表里包括hj.bit_customer_id会看的更清楚些,到底所谓多的数据它的id取值是什么,不清楚你的表结构,所以只能泛泛的说。
      

  10.   

    我现在 把 count(x.bit_id)  换成 count(bit_customer_id)  出来的结果就是 正确的 
    但是有必须要 统计x.bit_id 这个字段  找不到原因在那里 希望 你能 指点一下 谢谢 !!
      

  11.   

    加一个group by x.bit_id试试
      

  12.   

    select  isnull(count(x.bit_id),0) from  base_band x  join base_series y  on y.bit_bandid=x.bit_id  
    join base_modal z on z.bit_seriesid=y.bit_id
    join veh_vehicle veh on veh.bit_carmodel = z.bit_id 
    join 
    (select xs.bit_customer_id from VEH_SaleOrder xs 
    union select jxs.bit_customerid from VEH_DealSellInfo jxs
    ) as hj
    on hj.bit_customer_id=veh.bit_customer_id 
    group by xxx具体按什么分组你看着办。