use TestDB
create table test8
(
      id int,
      name varchar(50)
)
create table test9
(
     id int,
     name varchar(50)
)insert into test8
select  1,'aaa' union all
select  2,'bbb' union all
select  3,'ccc' union all
select  4,'ddd' 
insert into test9
select  3,'abc' union all
select  3,'ddd' union all
select  1,'ghd' union all
select  7,'hgd' select A.id,A.name,B.name from test8 A
inner join test9 B on  A.ID=B.ID此处得到的结果将是:
1 aaa ghd
3 ccc abc
3 ccc ddd因此test8里的ID重复了,但是我要的结果里ID是不能重复的,所以我试图用top 1 这样写:select A.id,A.name,B.name from test8 A
inner join (select top 1 from test9 B on A.ID=B.ID) B on A.ID=B.ID但是sqlserver 提示错误,别名 “A” 无法识别,
请教各位。
目的:通过ID连接表test8与 test9 ,但是 test8的ID不能重复

解决方案 »

  1.   

    改成:
    select A.id,A.name,B.name from test8 A
    inner join (select top 1 * from test9  Where A.ID=ID) B on A.ID=B.ID
      

  2.   

    ls的SQL报错,别名"A" 不能识别
      

  3.   

    select A.id,A.name,B.name from test8 A
    inner join test9 B on A.ID=B.ID
    where not exists(select 1 from test9 where id=B.id and name>B.name)
      

  4.   

    select id,MIN(aname) from (
    select A.id,A.name as aname,B.name  as bname from test8 A
    inner join test9 B on A.ID=B.ID) as aa GROUP BY ID
      

  5.   


    select A.id,A.name,B.name from test8 A
    inner join (select id,max(name) from test9 group by id) B on A.ID=B.ID
      

  6.   

    select A.id,A.name,B.name from test8 A
    inner join test9 B on A.ID=B.ID
    where not exists(select 1 from test9 where id=B.id and name>B.name)
      

  7.   

    select
      a.id,a.name,b.name
    from
      test8 a,
      test9 b
    where
      a.id=b.id
    and
      name=(select max(name) from test9 where id=b.id)