Question

Ok va ici:

J'ai une table avec identifiant (peut être double mais pas NULL) et la valeur (peut être double et NULL)

id      value
-----   -----
1       red
1       red
1       (null)
2       blue
2       blue
3       (null)

Alors, comment dois-je retourner les id et de la valeur de tous les enregistrements qui ont une valeur, mais si une valeur NULL est également trouvé ne comprennent pas dans le jeu de résultats.

Ainsi, le retour serait

id      value
-----   -----
2       blue

as id 1 et 3 ont une valeur de (null) dans un ou plusieurs des résultats

Était-ce utile?

La solution

Il est un typique « select où existe pas » requête de type avec de nombreuses façons d'écrire la réponse, par exemple:

Utilisation LEFT JOIN / WHERE ... IS NULL:

SELECT DISTINCT T1.id, T1.value
FROM your_table T1
LEFT JOIN your_table T2
ON T1.id = T2.id AND T2.value IS NULL
WHERE T2.id IS NULL

Utilisation de NOT IN:

SELECT DISTINCT id, value
FROM your_table
WHERE id NOT IN
(
    SELECT DISTINCT id
    FROM your_table
    WHERE value IS NULL
)

Utilisation de NOT EXISTS:

SELECT DISTINCT id, value
FROM your_table
WHERE NOT EXISTS
(
    SELECT NULL
    FROM your_table T1
    WHERE your_table.id = T1.id AND T1.value IS NULL
)

Autres conseils

select t1.id, t1.value
from MyTable t1
left outer join MyTable t2 on t1.id = t2.id and t2.value is null
where t2.id is null
group by t1.id, t1.value
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top