2017-04-19 4 views
0

私の表は、このようなものです選択:のMySQL - グループ内のすべてがNULLである場合にのみ

ID|EID|priority|completed_forms|all_forms_in 
1 |78 |NULL |y    |y 
2 |24 |NULL |y    |y 
3 |78 |1  |y    |y 

私が達成したいこと:それらはすべて同じEIDとすべてを共有する場合 が行のみを選択します優先度はNULLであり、completed_formsとall_forms_inは 'y'とマークされています。私が試した何

ここでは私の現在のSELECT文です:

SELECT * FROM tasks 
WHERE priority IS NULL AND EID in 
(
SELECT * FROM 
    (select EID from tasks 
    WHERE completed_form = 'y' AND all_forms_in = 'y') as priority_check 
GROUP BY EID having count(*) = 2 
) 

期待される結果:私は選択のリターンを確保する必要があるので、これは行を戻さないしたい 場合にのみ、両方の行NULLです。この場合、ID 1とID 3は共にNULLを共有しません。代わりに、それはこのように、ID 1

+1

なぜID = 2と行べきではないのですか? EIDは 'priority = NULL'で2行以上必要ですか? –

+0

この例では、正確に2(count(*)= 2を持つGROUP BY EID)でなければなりません。 EID = 24のカウントは1つだけなので、返されません。見るべき唯一の2行は1と3です。しかし、両方が優先順位のためにNULLを持っていない限り、何も選択すべきではありません。 – osakagreg

+0

あなたはSqlFiddleを提供できますか? –

答えて

0

あなたはAND COUNT(priority) = 0(フィールド名を持つCOUNTがNULL値をカウントされません)を追加することができますが返されます。返される

SELECT EID FROM tasks 
GROUP BY EID HAVING 
    COUNT(priority) = 0 AND 
    COUNT(DISTINCT completed_form) = 1 AND MAX(completed_form) = 'y' AND 
    COUNT(DISTINCT all_forms_in) = 1 AND MAX(all_forms_in) = 'y'AND 
    COUNT(*) = 2 
+0

それはグループ機能の無効な使用を作成します – osakagreg

+0

あなたは正しいです、答えを変更しました –

関連する問題