有表如下
主键          字段A              字段B
  1                a                  111111
  2                b                 111111
  3                c                 222222
  4                d                 222222
  5                a                  111111
  6                c                   111111 
  7                f                   111111 
  8                a                  222222 
  9                c                   222222希望得到的结果是
1        a          111111
3        c           222222
5        a           111111
9        c           222222
因为字段B只能属于一个字段A的值。以字段B分组。第一次出现的字段A和字段B组合为合法的(例如id为1、5的a和id为3的c)
不是第一次出现的字段A+字段B组合不查询出来。
表达的不是很清楚,看看得到的结果大概是这样。希望帮一下忙。谢谢!  

解决方案 »

  1.   

    select *
    from 有表如下 a
    where exists (select 1  from 有表如下 where 字段A=a.字段A and 字段B =A.字段B and 主键!= a.主键)
      

  2.   

    哦。不好意思。可以这么说把。
    字段A比喻为用户,字段B比喻为手机号。
    一个用户可以有多个手机号。一个手机号只能属于一个用户。
    当第一次在数据库出现的“用户+手机号”组合视为合理的,例如 a用户和111111手机号。
    后面出现的不用查询出来,因为不合理。例如 b用户和1111111手机号
    但是 a用户和111111手机号可以重复出现。。所以查询结果如下:
    1 a 111111
    3 c 222222
    5 a 111111
    9 c 222222
      

  3.   

    select *
    from 有表如下 a
    where exists (select 1  from 有表如下 where 字段A=a.字段A and 字段B =A.字段B and 主键!= a.主键)
    这个语句的结果不是这样吗? 如果不是,那你得到的结果是什么样?
    1        a          111111
    3        c           222222
    5        a           111111
    9        c           222222
      

  4.   

    而且。即使不说仅有一条数据的情况。
    如果有 两条 a  222222的数据。这样也能查询得出来。
    题目含义是:
    当第一次在数据库出现的“用户+手机号”组合视为合理的,例如 a用户和111111手机号。
    后面出现的不用查询出来,因为不合理。例如 b用户和1111111手机号数据库里:c 222222是最早出现的数据。
    那么即使后面有再多条 a 222222也不应该查询出来。
      

  5.   

    数据库数据:
    主键 字段A 字段B
      1 a 111111
      2 b 111111
      3 c 222222
      4 d 222222
      5 a 111111
      6 c 111111  
      7 f 111111  
      8 a 222222  
      9 c 222222
     10 f 333333
     11 a 222222
     12 a 444444字段A比喻为用户,字段B比喻为手机号。
    一个用户可以有多个手机号。一个手机号只能属于一个用户。
    当第一次在数据库出现的“用户+手机号”组合视为合理的,例如 a用户和111111手机号。
    后面出现的不用查询出来,因为不合理。例如 b用户和1111111手机号
    但是 a用户和111111手机号可以重复出现。。所以查询结果如下:得到的结果应该是:
     1 a 111111
     3 c 222222
     5 a 111111
     9 c 222222
     10 f 333333
     12 a 444444
      

  6.   

    mysql> select * from woaiyingyu321;
    +----+------+--------+
    | id | a    | b      |
    +----+------+--------+
    |  1 | a    | 111111 |
    |  2 | b    | 111111 |
    |  3 | c    | 222222 |
    |  4 | d    | 222222 |
    |  5 | a    | 111111 |
    |  6 | c    | 111111 |
    |  7 | f    | 111111 |
    |  8 | a    | 222222 |
    |  9 | c    | 222222 |
    | 10 | f    | 333333 |
    | 11 | a    | 222222 |
    | 12 | a    | 444444 |
    +----+------+--------+
    12 rows in set (0.04 sec)mysql> select *
        -> from woaiyingyu321
        -> where (a,b) in (select a,b from woaiyingyu321 group by b);
    +----+------+--------+
    | id | a    | b      |
    +----+------+--------+
    |  1 | a    | 111111 |
    |  3 | c    | 222222 |
    |  5 | a    | 111111 |
    |  9 | c    | 222222 |
    | 10 | f    | 333333 |
    | 12 | a    | 444444 |
    +----+------+--------+
    6 rows in set (0.10 sec)mysql>