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. 少なくとも1つの重複が適用され、オレンジ色の「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

これらを3つの別々のクエリとして記述し、それらを組み合わせてみましょう。

オレンジに値'f'が含まれるか、値が含まれない(空の)行のみを返す方法を探しています

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

リンゴに重複する値があり、少なくとも1つの重複するものにオレンジ色の「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 に答える