2


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. 橙子包含值“f”或没有值(空)
  2. 苹果中有重复的值
  3. 应用中至少有一个副本包含橘子中的“p”值。

粗体和斜体的第 4,5 和 7 行是我所追求的。

4

2 回答 2

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 小提琴示例

于 2012-11-05T15:48:06.407 回答
0

让我们将它们写成三个单独的查询,然后将它们组合起来。

寻找一种仅返回橙子包含值“f”或没有值(空)的行的方法

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

苹果中有重复的值,并且至少一个重复包含橙子中的“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'

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

于 2012-11-05T15:51:32.810 回答