a表
拨出号码 日期b表
手机 座机 姓名a表的拨出号码对应到b表的 手机 座机字段,也就是说有可能拨出号码是手机 或者是 座机
现在要求是查出所有的a表拨出号码记录根据手机或者座机关联的b表姓名主要问题在于这个两者手机 座机 或的关系最后声明一点,所有的表记录(每一个号码只出现一次),当然也包括了可能拨出号码不在b表的手机或者座机(也就是说都查不到,也显示出来)ps:mssql 是否支持字符串截取?因为拨出号码可能带区号或者外地手机加0,如果用like left join on 的时候又不行求解

解决方案 »

  1.   

    select * from a left join b on a.拨出号码=b.手机 or a.拨出号码=b.座机
    substring() 这是字符串截取函数 ,用法百度吧
      

  2.   

    也就是说 b表可能有3000个联系人 a表只有100条记录,如何以a表为标准查询?
    现在很多a表不存在但是b表存在的都显示出来了
      

  3.   

    select * from a left join b on a.拨出号码=b.手机 
    union 
    select * from a left join b on a.拨出号码=b.座机
      

  4.   

    select 拨出号码,姓名 from a left join b on a.拨出号码=b.手机 
    union 
    select 拨出号码,姓名 from a left join b on a.拨出号码=b.座机
    这不对? 
      

  5.   


    其实这个原理上没错,只是因为数据上 两个表关联字段 都存在null 或者''的字段 所以导致了重复数据去除 这些个 关联字段为null 和 ''然后再left join 就可以了但是问题是在left join 之前去除?这个如何做到 如果是结果里面 去除似乎 没效果了
      

  6.   

    select * from (select * from a where 拨出号码<>'' and not 拨出号码 is null) as a left join b on a.拨出号码=b.手机 or a.拨出号码=b.座机表b 也这样处理下
      

  7.   

     问一下如何比对的时候 类似 left join on a.number = b.zoneCode+b.officeNumber就是座机加上区号再比对
      

  8.   

    用 charindex(a.number,b.zoneCode+b.officeNumber)>0 函数查找,这样效率不好 偶尔用还行