在USERS表中,有如下数据:
number (int)  name (varchar)
1               a
2               b
3               b
4               c
5               a
6               b
7               c
利用SQL的delete语句取到如下结果:
number(int)    name(varchar)
1               a
2               b
4               c
也就是说:如果name 有相同的值时,取number 最小的那个.
利用SQL的delete语句(只有一条SQL语句)。
谢谢。

解决方案 »

  1.   

    select min(number) number, name from Users group by name
      

  2.   

    delete u from users u where ID not in(select min(ID) from users where Name=u.Name )
      

  3.   

    --> 测试数据:#
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(number int, name varchar(8))
    insert into #
    select 1, 'a' union all
    select 2, 'b' union all
    select 3, 'b' union all
    select 4, 'c' union all
    select 5, 'a' union all
    select 6, 'b' union all
    select 7, 'c'select min(number) number, name from # group by name
    /*
    number      name
    ----------- --------
    1           a
    2           b
    4           c
    */
      

  4.   

    delete?看错题意,请无视我的。
      

  5.   

    是利用DELETE 语句,谢谢了
      

  6.   

    if object_id('[users]') is not null drop table [users]
    go
    create table [users]([number] int,[name] varchar(1))
    insert [users]
    select 1,'a' union all
    select 2,'b' union all
    select 3,'b' union all
    select 4,'c' union all
    select 5,'a' union all
    select 6,'b' union all
    select 7,'c'
     
    delete users 
    where exists(select 1 from users t where t.name=users.name and t.number<users.number)select * from users
    /**
    number      name
    ----------- ----
    1           a
    2           b
    4           c(3 行受影响)
    **/
      

  7.   

    DELETE u  FROM [User] u  WHERE number=(SELECT MIN(number) FROM [user] WHERE NAME=u.NAME) AND number<>(SELECT MAX(number) FROM [user] WHERE NAME=u.NAME)