两个表
R1(书名, 作者)
R2(书名,看者)
找出看了每一本作者是 xx 的看者,分别用except 和不用except 实现
在线等。。
新手

解决方案 »

  1.   


    select R1.作者,R1.书名,R2.看者 from R1 left join R2 on R1.书名 = R2.书名
      

  2.   

    如果是说  查询某本书的所有看者,那在后面直接加个where 条件就可以了如:
    select R1.作者,R1.书名,R2.看者 from R1 left join R2 on R1.书名 = R2.书名 where R1.作者='XX'
      

  3.   

    是看了作者xx的所有书,也可以看别人的书,但是xx的所有书一定要看
      

  4.   


    那又 right join 就可以了
      

  5.   


    就把 left join 改成 right join 就行了
      

  6.   

    没有考虑效率问题:create table R1(书名 varchar(20),作者 varchar(20))
    GO
    create table R2(书名 varchar(20),看者 varchar(20))
    GOinsert into R1
    select 'B1','A1'
    union all
    select 'B2','A1'
    GOinsert into R2
    select 'B1','R1'
    union all
    select 'B2','R1'
    union all
    select 'B1','R2'
    union all
    select 'B2','R3'
    GOselect Book.书名,Book.作者,Reader.看者
    from (
      select 书名,作者,(select count(1) from R1 a where a.作者 = R1.作者) as 图书数
      from R1
      where 作者 = 'A1'
    ) Book
      inner join (
        select max(书名) as 书名,看者,作者,sum(图书数) as 图书数
        from (
          select distinct R2.书名,R2.看者,R1.作者,1 as 图书数
          from R2
            left join R1 on R1.书名 = R2.书名
          where R1.作者 = 'A1'
        ) ReadBook
        group by 看者,作者
    ) Reader
      on Reader.作者 = Book.作者
        and Reader.图书数 = Book.图书数drop table R1
    GO
    drop table R2
    GO/*
    书名                   作者                   看者                   
    -------------------- -------------------- -------------------- 
    B1                   A1                   R1
    B2                   A1                   R1(所影响的行数为 2 行)
    */
      

  7.   

    不考虑效率能简单点吗,还有用except实现
      

  8.   

    left join 改成 right join 就行了
      

  9.   

    用 count(*) 、in、top、group by having count()