select * from work a,work_author b where a.w_id=b.w_id and b.w_position and b.w_id in(select w_id from work_author where aid=var)

解决方案 »

  1.   

    select a.*,b.aid,b.W_position from work a left join (select * from work_author where w_position=1)b on a.w_id=b.w_id
      

  2.   

    CrazyFor(蚂蚁) :你的方法不行,因为最基本的你没有把aid这个条件加上去,这样一来任何人都可以看任何书的信息,而不管他是不是书的作者
      

  3.   

    liuyun2003(流云) :你的方法好象行,我再多试几个数据,马上就给分。
    只是感觉用IN会不会效率比较低,不知道是否可以转换为用EXISTS,我自己试试吧
      

  4.   

    select top 1 * from work a,work_author b where a.w_id=b.w_id order by b.w_position
      

  5.   

    select top 1 * from work a,work_author b where a.w_id=b.w_id and b.w_id in(select w_id from work_author where aid=var) order by b.w_position
      

  6.   

    jiutiao:用了top 1 ,如果这个用户是两本书的作者,那他不就只能看到一本书的信息了?TOP要用也只能用在子查询中,我想。
    我说的返回一条记录的意思是对同一本书有几个作者都只返回第一作者,而如果一个人是10不同书的作者,则需要返回10条记录。
      

  7.   

    好象这样也可以,不过可能效率要比子查询差一点
    declare @work_author_aid integer
    select @work_author_aid=2
    select a.w_id,a.w_name,b.aid,b.w_position
    from work as a inner join work_author as c
    on a.w_id=c.w_id and c.aid=@work_author_aid
    inner join work_author as b
    on c.w_id=b.w_id and b.position=1
      

  8.   

    SELECT work.w_id, work.w_name, work_author.aid, work_author.w_position
    FROM [work] INNER JOIN work_author ON work.w_id = work_author.w_id
    WHERE (((work_author.aid)="作者") AND ((work_author.w_position)=1))
    GROUP BY work.w_id, work.w_name, work_author.aid, work_author.w_position;