select  a.XMMC,B.CBMC,c.UseDate,c.ComebackDate,c.WorkDays,c.FollowWorkPlan,d.DRHY,d.DRCY,d.DRCS
from 
HYGC_SHIP_DAILY as a,
HYGC_SHIP_DAILY_FZCBDT as b,  
HYGC_SHIP_DAILY_OIL_WATER as d,  
T_Plan as c  where b.BH=a.BH and b.BH=d.BH and b.CBMC=C.ShipName and b.CBMC=d.CBMC     
and  CONVERT(VARCHAR(10),a.RQ,120) = CONVERT(VARCHAR(10),'2009-12-24',120)下面是结果:应该在   SDFSD11111111 3.00 的位置应该是空,但是现在把别的行的数据给读出来了!!
黄海 吉野2 2009-12-18 00:00:00.000 2009-12-18 00:00:00.000 12 SDFSD11111111 3.00

解决方案 »

  1.   

    select a.XMMC, b.CBMC,c.ComebackDate,c.WorkDays,c.FollowWorkPlan 
    from HYGC_SHIP_DAILY_FZCBDT as b,T_Plan as c,HYGC_SHIP_DAILY as a  
    where b.BH=a.BH and b.CBMC=C.ShipName
    and  CONVERT(VARCHAR(10),a.RQ,120) = CONVERT(VARCHAR(10),'2009-12-24',120)我加上了b.CBMC=C.ShipName 没有满足的条件黄海 吉野2 2009-12-18 00:00:00.000 12 SDFSD11111111应该 12 和 SDFSD11111111我想让其显示为null不应该查不出来或者是其他的数据明白吗?
      

  2.   

    这个直接外间关联的,需要用左联接试着把and  CONVERT(VARCHAR(10),a.RQ,120) = CONVERT(VARCHAR(10),'2009-12-24',120)
    这句条件去掉,只留下表关联条件,看看是否产生了笛卡尔乘积
      

  3.   

    哎   sql  我太弱了select a.XMMC, b.CBMC,c.UseDate,c.ComebackDate,c.WorkDays,c.FollowWorkPlan,d.DRHY,d.DRCY,d.DRCS
    from HYGC_SHIP_DAILY_FZCBDT as b left join T_Plan as c
    on b.CBMC=C.ShipName left join
    HYGC_SHIP_DAILY as a on  b.BH=a.BH  left join HYGC_SHIP_DAILY_OIL_WATER as d on
    b.CBMC=d.CBMC and B.BH=D.BH
    and  CONVERT(VARCHAR(10),a.RQ,120) = CONVERT(VARCHAR(10),@Time,120)