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
寻找一种方法只返回其中的行:
行4,5&粗体和斜体的7是我所追求的。
答案 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'
答案 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'
这是未经测试的,因为我没有可用的架构。