例: a表 aid int 关键字  
        flag bit 默认为0
    b表 bid int 关键字   与a中的aid 相关联
        name varchar(4)
a:   aid    flag    当flag 为1 时,b表中bid跟a表aid相同时,b表中记录就可以有两个,
      001    0      当flag为 0时,b中只能有一个.
      002   1       
      003   1
      004   0
b:   bid    name
     001     lsx
     002     pp
     002     uu
     003     kk
 现在我想查询a表中在b表中没有对应的记录.不过要判断当flag=1时是否b表刚好有两个,如果只有一个也要查出a表中,如以上例子按要求可以查出结果:
a 表:
aid  flag
003   1
004   0
像以上的结果能不能通过SQL语句实现吗?请高手指点!

解决方案 »

  1.   

    当flag 为1 时,b表中bid跟a表aid相同时,b表中记录就可以有两个
    ------------------------------
    你B表的bid是关键字 怎么有两个记录?
      

  2.   

    没看懂你的意思。
    你最后的结果好象跟“不过要判断当flag=1时是否b表刚好有两个,如果只有一个也要查出a表中”没什么关系?
      

  3.   

    “不过要判断当flag=1时是否b表刚好有两个,如果只有一个也要查出a表中”,不明白。
      

  4.   

    select distinct aid, flag from a left join b on aid= bid 
    where (flag = 0 and bid is null) 
    or (flag = 1 and (select count(*) from b where bid = aid)=2)
      

  5.   

    select * from a where aid in (select bid from b)
      

  6.   

    看的有点晕,是不是这个意思:a表的aid对应b表有几条记录?
      

  7.   

    这个可以
    select distinct aid, flag from a left join b on aid= bid 
    where (flag = 0 and bid is null) 
    or (flag = 1 and (select count(*) from b where bid = aid)=1)
      

  8.   

    select a.* from a where (select count(*) from b where a.aid=b.bid)=flag+1