2017-09-02 1 views
0

別の列の2つの条件を使用して列の別個の要素を抽出する必要があります。たとえば、SQL:1つの列で2つの条件を使用して選択します。

c1 | c2 
--------- 
u | a 
v | b 
w | c 
x | a 
x | b 
x | c 
y | a 
y | c 

c2に 'a'は含まれていても 'b'ではなく、c1のエントリが必要です。返される名前は 'u'と 'y'でなければなりません。

ご協力いただきありがとうございます。

+1

まだ試しましたか?スタックオーバーフローは無料の宿題サービスではありません。 –

+0

私は「テーブルからどこでもc2 = 'a'とc2!= 'b'」を選択して交差を試み、いくつかの方法を試しました。それはうまくいきませんでした... –

+0

これは宿題の匂いに同意しますが、私はちょうど私が答えを提出しただけで興味をそそられていました。 –

答えて

3

おそらく、これを行うには、概念的に最も簡単な方法は、c1列に集約するだろうとちょうどaが存在し、bが存在しないことを主張:

SELECT c1 
FROM yourTable 
GROUP BY c1 
HAVING 
    SUM(CASE WHEN c2 = 'a' THEN 1 ELSE 0 END) > 0 AND 
    SUM(CASE WHEN c2 = 'b' THEN 1 ELSE 0 END) = 0 
+0

ありがとうございました。それを別の機能にマップするためにケースを使用すると、決して私には到着しませんでした。 –

0
SELECT DISTINCT t.c1 
FROM table as t 
WHERE 
t.c2 LIKE '%a%' 
AND NOT t.c2 LIKE '%b%' 
1

これは、SQLものではありません優れているので、ちょっと大変です。この素朴な実装はかなりバニラであり、ほとんどの方言の下でほとんど変更を加える必要はありません。

ロッキングを防止するために、DB2では内部クエリに "with ur"を追加する必要があります。

select c1 from yourtable 
where c2 = 'a' 
    and c1 not in (
    select c1 from yourtable where c2 = 'b' 
) 
関連する問題