它们的结果不同的,不过我想第二条应该是你想要的
你的第一条结果是:只要存在一个test1.a= test2.b,查询结果就全是空
你的第二条结果是:test1.a中的值中能在test2.b找到对应值的被丢弃,不能找到对应值的被选择。
跟第二条结果对应的类似第一条格式的语句应该是:
select a.a from test1 a where not exists (select 1 from test2 b where b.b = a.a);

解决方案 »

  1.   

    “你的第一条结果是:只要存在一个test1.a= test2.b,查询结果就全是空”说得不错
      

  2.   

    楼主第二句构思很巧妙,
    不过这两句是有很大差别的,对于第二句如果b.b确实有空值存在,并且数量大于你的结果集,结果可能是一样的,如果没有空值存在,你的结果集就不正确了。因为你的d.b is null
    是作为一个查询条件设定的
      

  3.   

    有个查询优化的问题吧?记录少的表,尽量放SQL语句的右边,因为SQL编译器是从右边开始扫描执行的
      

  4.   

    to :jackjingsg(飞翔的精灵) 
     我用的是一个左关联 当然会存在null值