2017-06-24 11 views
0

私は、次のスキーマ(列)のデータベースを持っている:式でグループ内の条件をチェックするには?

id phoneNumber isActive 

、同じphoneNumberで複数のレコードが存在することができます。私は、同じphoneNumberのレコードのいずれかに、プロパティーisActiveがtrueに設定されているレコードが存在するかどうかをチェックしたいと思います。もしそうなら、私は結果でそれを見たくない。

SELECT phoneNumber 
FROM TABLE 
GROUP BY phoneNumber 
HAVING SUM(CASE WHEN isActive = 'true' THEN 1 ELSE 0 END) = 0; 

注:GROUP BYSELECT *を使用する -

SELECT * FROM TABLE WHERE isActive = 'true' GROUP BY phoneNumber; 

このdoesntの仕事>は、それは1つがあなたがHAVING句を使用してこれを行うことができ、真の

+0

アクティブな電話番号が1つある場合は、**表示したくないのですか? –

+0

はい、そうです。 – uksz

+0

SQLの方言は何ですか? MySQL? –

答えて

1

からisActiveセットを持っていてもレコードを返します有効なSQLではなく、ほぼすべてのデータベースで使用できません。それはまた、ちょっとした思考を示しています。 GROUP BY句に含まれていない列の値はどうなりますか?それらの列は、MIN(),MAX()SUM()などの集計関数の引数にする必要があります。

+0

すぐにお返事ありがとうございます! – uksz

+0

私が変更しなければならなかったのは、isActive = trueの場合です。少なくとも1つのisActive = trueを持つものは含めたくありませんでした。 – uksz

+0

@uksz :少なくとも1つのfalseを持つすべてのものが含まれます。それは同じ数が真である他の行があることを意味するわけではありません... –

関連する問題