2017-10-04 3 views
1

Si j'ai une table commeComment sélectionner des lignes groupées avec uniquement des valeurs NULL?

task_id | state 
--------+------------ 
    1 | NULL 
--------+------------ 
    1 | RESOLVED 
--------+------------ 
    2 | NULL 
--------+------------ 
    2 | NULL 

Comment puis-je obtenir des lignes groupées par task_id quel état est NULL uniquement. Dans ce cas, seules les lignes avec task_id 2.

+0

Voulez-vous seulement 2 task_id, ou les deux lignes avec task_id = 2? – jarlh

+0

Qu'est-ce que tu penses si j'écris une ligne à tâtons via task_id? –

+0

Je pense que thick de groping – Strawberry

Répondre

2

Faites un GROUP BY, utilisez HAVING pour revenir task_id ayant des états seulement nuls.

select task_id 
from tablename 
group by task_id 
having max(state) is null 
+0

Cela fonctionne mais est-il correct d'utiliser max() avec des valeurs NULL? –

+1

@ Čamo: Absolument ... – zarruq

1

voici mon approche:

Select * from yourTable where state is null and task_id not in 
    (select task_id from yourTable y where state is not null) 
+0

Je pense que cela ne retournera pas seulement task_id = 2 –

+0

Cela fonctionne pour moi !! –

+0

Existe-t-il un moyen de le réécrire en jointures au lieu de sous-sélectionner? –

2

Essayez ceci -

SELECT task_id 
FROM YOUR_TABLE 
WHERE state NOT IN (SELECT task_id 
        FROM YOUR_TABLE 
        WHERE task_id IS NOT NULL) 
+0

Existe-t-il un moyen de le réécrire en jointures au lieu de sous-sélectionner? –

0

En fonction COUNT ignore NULL dans le cas où une colonne spécifique est attribué, vous pouvez utiliser group by, count et having comme ci-dessous.

SELECT task_id 
FROM t1 
GROUP BY task_id 
HAVING count(STATE) = 0; 

DEMO