tabA
idtabB
idtabM
aid 
bid如上3张表。
tabA和tabB通过中间表tabM建立多对多的关系, tabM中的两个字段分别外键引用tabA和tabB。一、给定一个或一个以上的tabB的记录
 1、查询出没有和tabB中给定记录建立关联的tabA中的记录。
 
 2、查询出和tabB中给定记录关联的tabA中的记录
  select a.id from tabA as a, tabB as b, tabM as m where a.id=m.aid and b.id=m.bid and b.id in (?, ?, ...)二、给定一个或一个以上的tabA的记录
 1、查询没有和tabA给定记录关联的tabB的记录
 2、查询和tabA给定记录关联的tabB的记录不知道问题说清楚没?查询与给定记录关联的记录我是按照红色字体中的写法写的,不知道对不对,我看结果是对的。但是不知道效率如何,想参考下高手们给出的答案。 查询为关联上的我没写出来,还望指教! 数据库系统软件没专门学过,正好要用,碰到问题来请教了

解决方案 »

  1.   

    一、给定一个或一个以上的tabB的记录
      1、查询出没有和tabB中给定记录建立关联的tabA中的记录。
    select * from tabA a where id not in (select aid from tabM where bid in (1,2,3))
      
      2、查询出和tabB中给定记录关联的tabA中的记录
    select * from tabA a where id in (select aid from tabM where bid in (1,2,3))二、给定一个或一个以上的tabA的记录
      1、查询没有和tabA给定记录关联的tabB的记录
    select * from tabB a where id not in (select bid from tabM where aid in (1,2,3))
      2、查询和tabA给定记录关联的tabB的记录
    select * from tabB a where id in (select bid from tabM where aid in (1,2,3))