select u.*
from 借书表 j
join 用户表 u on j.用户id=u.用户id
join 书表 s on j.书id=s.书id
where s.书名 in('aaa','bbb','ccc')

解决方案 »

  1.   

    select c.书名,b.用户名
    from 表1 a
    join 表2 b on a.用户ID  = b.用户ID
    join 表2 c on a.书ID = c.书ID
    WHERE c.书名 in ('aaa','bbb','ccc')
      

  2.   

    --上面的错了,改一下:select u.用户ID,u.用户名
    from 借书表 j
    join 用户表 u on j.用户id=u.用户id
    join 书表 s on j.书id=s.书id
    where s.书名 in('aaa','bbb','ccc')
    group by u.用户ID,u.用户名
    having count(*)=3  --注意,这里是等3,即3本书,如果有4本书,要对应修改为4
      

  3.   

    --下面是测试--测试数据
    declare @借书表 table (用户ID int,书ID int)
    insert into @借书表
    select 1,1
    union all select 1,2
    union all select 1,3
    union all select 2,2
    union all select 2,3declare @用户表 table (用户ID int,用户名 varchar(10))
    insert into @用户表
    select 1,'小张'
    union all select 2,'小王'declare @书表 table(书ID int,书名 varchar(10))
    insert into @书表
    select 1,'aaa'
    union all select 2,'bbb'
    union all select 3,'ccc'--查询
    select u.用户ID,u.用户名
    from @借书表 j
    join @用户表 u on j.用户id=u.用户id
    join @书表 s on j.书id=s.书id
    where s.书名 in('aaa','bbb','ccc')
    group by u.用户ID,u.用户名
    having count(*)=3/*--测试结果用户ID        用户名        
    ----------- ---------- 
    1           小张(所影响的行数为 1 行)
    --*/
      

  4.   

    SELECT * FROM 借书表
    WHERE (书ID IN (SELECT 书ID FROM 借书表 GROUP BY 书ID HAVING COUNT(1) > 1))
      

  5.   

    create table 借书表
      (用户ID int,  书ID int)
      insert 借书表 values( 1  ,    1)
      insert 借书表 values( 1  ,    2)
     insert 借书表 values(  1  ,    3)
     insert 借书表 values(  2  ,    2)
      insert 借书表 values( 2  ,    3)
      --insert 借书表 values( 2  ,    1)go create table 用户表
      (用户ID int ,  用户名 char(10))
    insert into 用户表   values( 1,    '小张')
    insert into 用户表   values(2 , '小王')go
    create table 书表
      (书ID int,     书名 char(10))
     insert into 书表 values( 1,'aaa')
    insert into 书表 values(  2, 'bbb')
    insert into 书表 values(  3 ,'ccc')select a.* from 用户表 a 
    join 借书表 b on a.用户id=b.用户id
    join 书表 c on b.书id=c.书id 
    where c.书名 in ('aaa' ,'bbb','ccc')
    group by a.用户ID,a.用户名
    having count(*)=3用户ID        用户名        
    ----------- ---------- 
    1           小张      (所影响的行数为 1 行)
      

  6.   


    上面的不好,有问题,当一个人借了两本 'aaa'时就出问题了
    改成下面的就正确了create table 借书表
      (用户ID int,  书ID int)
      insert 借书表 values( 1  ,    1)
     -- insert 借书表 values( 1  ,    2)
     insert 借书表 values(  1  ,    3)
     insert 借书表 values(  2  ,    2)
      insert 借书表 values( 2  ,    3)
      insert 借书表 values( 2  ,    1)
     insert 借书表 values( 1  ,    1)
     insert 借书表 values( 1  ,    1)go create table 用户表
      (用户ID int ,  用户名 char(10))
    insert into 用户表   values( 1,    '小张')
    insert into 用户表   values(2 , '小王')go
    create table 书表
      (书ID int,     书名 char(10))
     insert into 书表 values( 1,'aaa')
    insert into 书表 values(  2, 'bbb')
    insert into 书表 values(  3 ,'ccc')select a.* from 用户表 a 
    join (select distinct * from 借书表) b on a.用户id=b.用户id
    join 书表 c on b.书id=c.书id 
    where c.书名 in ('aaa' ,'bbb','ccc')
    group by a.用户ID,a.用户名
    having count(*)=3数据如下:
    用户ID        用户名        
    ----------- ---------- 
    2           小王      (所影响的行数为 1 行)
      

  7.   

    select *
    from 用户表
    where exists (select 1 
                    from 借书表
                  where 书ID = (select 书ID from  书表 where 书名 = 'aaa')
                        and 用户表.用户ID = 用户ID
                 )
    and
         exists (select 1 
                    from 借书表
                  where 书ID = (select 书ID from  书表 where 书名 = 'bbb')
                        and 用户表.用户ID = 用户ID
                 )
    and
    exists (select 1 
              from 借书表
             where 书ID = (select 书ID from  书表 where 书名 = 'ccc')
                        and 用户表.用户ID = 用户ID
                 )
      

  8.   

    select *
    from 用户表
    where exists (select 1 
                    from 借书表
                  where 书ID = (select 书ID from  书表 where 书名 = 'aaa')
                        and 用户表.用户ID = 用户ID
                 )
    and
         exists (select 1 
                    from 借书表
                  where 书ID = (select 书ID from  书表 where 书名 = 'bbb')
                        and 用户表.用户ID = 用户ID
                 )
    and
    exists (select 1 
              from 借书表
             where 书ID = (select 书ID from  书表 where 书名 = 'ccc')
                        and 用户表.用户ID = 用户ID
                 )
    and 
    not exists (select 1 
                  from 借书表 
                 where 用户表.用户ID = 用户ID 
                       and 书ID  not in (select 书ID 
                                           from  书表 
                                          where 书名 in ('aaa','bbb','ccc')))