mysql查找重复项

时间:2012-11-05 15:44:48

标签: mysql


id | apples  | oranges
1    111       p
2    112       p
3    113       p
4    113       f
5    113       -
6    114       p
7    114       f
8    115       -
9    115       -
10   116       f

寻找一种方法只返回其中的行:

  1. oranges包含值'f'或没有值(空)
  2. 苹果中有重复的值
  3. 至少有一个副本包含橙色的'p'值。
  4. 行4,5&粗体和斜体的7是我所追求的。

2 个答案:

答案 0 :(得分:1)

您需要进行自我加入。像这样:

SELECT t1.*
FROM myTable t1
INNER JOIN myTable t2 ON t1.apples = t2.apples
WHERE t1.oranges IN ('f', '-')
AND t2.oranges = 'p'

SQL Fiddle example

答案 1 :(得分:0)

让我们将这些作为三个单独的查询,然后将它们组合起来。

  

寻找一种只返回oranges包含值的行的方法   'f'或没有值(空)

select *   
from table  
where oranges = 'f'
or oranges is null;
  

苹果中存在重复值且至少有一个重复   在oranges中包含'p'的值

select * 
( 
  select *
  from table    
  INNER JOIN (SELECT apples FROM inner_table
  GROUP BY apples HAVING count(id) > 1)
)
where oranges ='p'

然后你可以将它们组合起来:

select *
(
    select *  
    from table  
    where (oranges ='f' or oranges is null)  
    INNER JOIN (SELECT apples FROM inner_table
  GROUP BY apples HAVING count(id) > 1)
)
where oranges ='p'

这是未经测试的,因为我没有可用的架构。