解决方案 »

  1.   

    查找A表的数据在B 表是否存在 
    这种一般使用exists 来判断
      

  2.   

    (a.a15 = b.a15 or a.a15 = 9999999)
    这个条件很有问题,如果 a.a15 = 9999999,那么 b.a15可以是任何值,你确定是这样的匹配?
      

  3.   

    这个查询返回的数据量应该比较大,建议考虑返回此大结果集给前端程序是否有必要?另: 请问这个查询的业务逻辑是什么? 是否有其他过滤条件,请提供完整SQL语句.
      

  4.   


    恩 原来是null 我处理成9999999了后来发现没什么必要
    表很宽
    条件是这样的:
    A表 1~16列的值和B表1~16列匹配 完全相同 或A表中是NULL都成立没有前端程序就以数据处理  后面还有很长的操作
      

  5.   

    1,2,3,4,5,6,NULL

    1,2,3,4,5,6,7 相等

    1,2,3,4,5,66,NULL 不等
    这种逻辑应该能用什么方法实现吧
      

  6.   

    如果没有NULL值,还可以先把16个字段一起求和哈希值,用哈希值相等来进行初步过滤。
    有NULL值就算把16个字段一起放在索引中都利用不起来,没法可想。
      

  7.   

    楼主你看下这样可行不?
    ---表A增加字段“Flag”数据类型为“Bit”
    Update TableA Set Flag=0
    GoUpdate a Set Flag=1 From TableA a,TableB b
    Where (a.a15=b.a15 Or IsNuLL(a.a15,9999999)=9999999)
      And (a.a14=b.a14 Or IsNuLL(a.a14,9999999)=9999999)
      And (a.a13=b.a13 Or IsNuLL(a.a13,9999999)=9999999)
      And (a.a12=b.a12 Or IsNuLL(a.a12,9999999)=9999999)
      And (a.a11=b.a11 Or IsNuLL(a.a11,9999999)=9999999)
      And (a.a10=b.a10 Or IsNuLL(a.a10,9999999)=9999999)
      And (a.a9=b.a9 Or IsNuLL(a.a9,9999999)=9999999)
      And (a.a8=b.a8 Or IsNuLL(a.a8,9999999)=9999999)
      And (a.a7=b.a7 Or IsNuLL(a.a7,9999999)=9999999)
      And (a.a6=b.a6 Or IsNuLL(a.a6,9999999)=9999999)
      And (a.a5=b.a5 Or IsNuLL(a.a5,9999999)=9999999)
      And (a.a4=b.a4 Or IsNuLL(a.a4,9999999)=9999999)
      And (a.a3=b.a3 Or IsNuLL(a.a3,9999999)=9999999)
      And (a.a2=b.a2 Or IsNuLL(a.a2,9999999)=9999999)
      And (a.a1=b.a1 Or IsNuLL(a.a1,9999999)=9999999)
    Go