现在有两个表,table_a包含(a1,ab),table_b(b1,ab);其中table_a里面ab字段的数据较多,table_b中ab的数据都是包含在那个里面的,但是某些数据可能没有.
现在要查出table_a里面ab字段有table_b里面没有的行对应的a1值。其中ab字段对应的值是唯一的.
比如table_a是{(1,a),(2,b),(3,c),(4,d)},table_b{(fda,a),(fjdk,c)}
那我要得到的就是(2,b)和(4,d)这两行有没有一句话解决问题的?

解决方案 »

  1.   

    select a.* from table_a a left join table_b b on a.ab=b.ab where b.ab is null;
      

  2.   


    select *
    from table_a
    where ab not in (select ab from table_b);
      

  3.   

    大神啊,既然遇到了加问下,table_b目前只是一个表,假如有3个跟它相同结构的表,table_b1,table_b2,table_b3,
    现在要查table_a里面ab字段有,但是三个表都没有的话,怎么连接起来查询?
      

  4.   

    先用UNION查。
      

  5.   

    那就是
    select *
    from table_a
    where ab not in (
    select ab from table_b1 union all 
    select ab from table_b2 union all 
    select ab from table_b3
    )
    这样吧
    先用UNION查。
      

  6.   

    斑竹啊,问最后一个问题,我发现现在两个数据库几千条数据的情况下,这个语句就需要几秒钟的样子,当然还不是正式服务器,但是将来这个地方搞个几十万条数据估计的得崩溃啊。
    有没有办法可以更好的解决这个问题?
    这个字段其实保存的只是一些比较短的字符串,而且table_a里面这些字符串都是唯一的,我弄了个地方查出来保存为list然后比较好像也可以,但是数据太多java虚拟机都受不了,所以没有更好的办法了。先用UNION查。