表1                       表2 
NO    BOOK              BOOK    AUTHOR
125    b12              b01       wang
125    b13              b12       li
       b13              b13       li
124    b12              b42       zhao
124    b12              b65       zhao
123    b65
122    b42
122    b01如上为图书馆例子,NO为学号 ,要找出所有读了li 写的“所有”的书的学生学号。如上即为从表1 里选出 125
怎么办啊?? 我只会建个临时的view 再从里面挑
最好解释下阿,谢谢!!

解决方案 »

  1.   

    if object_id('pubs..A') is not null
       drop table A
    go
    create table A(NO varchar(10),BOOK varchar(10))
    insert into A(NO,BOOK) values('125',    'b12')
    insert into A(NO,BOOK) values('125',    'b13')
    insert into A(NO,BOOK) values('124',    'b12')
    insert into A(NO,BOOK) values('124',    'b12')
    insert into A(NO,BOOK) values('123',    'b65')
    insert into A(NO,BOOK) values('122',    'b42')
    insert into A(NO,BOOK) values('122',    'b01')
    goif object_id('pubs..B') is not null
       drop table B
    go
    create table B(BOOK varchar(10),AUTHOR varchar(10))
    insert into B(BOOK,AUTHOR) values('b01',       'wang')
    insert into B(BOOK,AUTHOR) values('b12',       'li')
    insert into B(BOOK,AUTHOR) values('b13',       'li')
    insert into B(BOOK,AUTHOR) values('b42',       'zhao')
    insert into B(BOOK,AUTHOR) values('b65',       'zhao')
    godeclare @AUTHOR as varchar(10)
    set @author = 'li'select no from
    (
      select distinct * from 
      (
        select * from A where book in (select book from B where author = @author)
      ) t
    ) m
    group by no having count(*) = (select count(*) from B where author = @author)drop table A,B/*
    no         
    ---------- 
    125(所影响的行数为 1 行)*/
      

  2.   

    表1                       表2 
    NO    BOOK              BOOK    AUTHOR
    125    b12              b01       wang
    125    b13              b12       li
           b13              b13       li
    124    b12              b42       zhao
    124    b12              b65       zhao
    123    b65
    122    b42
    122    b01如上为图书馆例子,NO为学号 ,要找出所有读了li 写的“所有”的书的学生学号。如上即为从表1 里选出 125
    怎么办啊?? 我只会建个临时的view 再从里面挑
    最好解释下阿,谢谢!!
    --------------
    好像还有124哦
    select distinct no from t1
    where exists(select 1 from t2 where t1.book=t2.book and t2.AUTHOR='li')
      

  3.   

    b12       li
    b13       li124    b12
    124    b12124少读了b13
      

  4.   

    感谢dawugui 的关照,也感谢qxq的参与
    谢谢!!!
      

  5.   

    select distinct A.no from A
    right join (select * from B where author= 'li')BB on A.book=BB.book