2016-08-23 1 views
0

Y at-il un moyen d'éviter les lignes vides dans une instruction SQL? Ma sortie est:SQL éviter les lignes vides

a | b | c 
1  2  3 
4 
EMPTY EMPTY EMPTY 
5 

Mais je veux:

a | b | c 
1 2 3 
4 
5 
+2

'a <> « EMPTY » && b <> 'VIDE' && c <> 'VIDE'? ou peu importe? –

+1

est-ce le texte vide ou nul? si null indique 'où a n'est pas nul et b n'est pas nul et c n'est pas nul', mais pour être sûr que nous aurions besoin de voir des exemples de données et de résultats attendus ainsi que votre requête actuelle. Il peut y avoir loin pour éliminer les nulls/vide faire quelque chose de mal dans la requête en cours. Comme une jointure externe et les colonnes ABC proviennent de la table retournant seulement les enregistrements correspondants. peut-être une jointure interne devrait-elle être utilisée à la place? – xQbert

Répondre

1

Si la valeur est vide ou si elle est null sont deux choses différentes, donc je ne suis pas sûr que vous recherchez.

Si NULL

SELECT * FROM table WHERE a IS NOT NULL OR b IS NOT NULL OR c IS NOT NULL; 

Si vide

SELECT * FROM table WHERE a <> '' OR b <> '' OR c <> ''; 
+0

aller un peu plus loin et montrer comment vous pouvez utiliser ISNULL() ou COALESE() pour comparer empty & null en même temps. O WH COALESCE (a, '') <> '' AND .... – Matt

+0

Ça ne marchera pas ... Il veut que les ORs ne le soient pas. – maplemale

+0

@maplemale Je suis d'accord avec duncan sur ET. Mais duncan je viens de relire votre réponse que je dois effacer Pourquoi utilisez-vous et n'est pas nul au lieu de IS NULL? Cela laisserait tomber tous les éléments sauf la rangée 1. Je pense que vous vouliez utiliser un IS NULL ET b IS NULL et c IS NULL – Matt

2

Si vous voulez vraiment vérifier toutes les colonnes de la table utilisez:

select * 
from the_table 
where not (the_table is null); 

Cela supprimera toutes les lignes où toute la colonne ns sont null.

Si vous voulez simplement vérifier un sous-ensemble des colonnes (par exemple, parce qu'il ya une colonne PK généré que vous ne nous avez pas montrer), utilisez:

select * 
from the_table 
where not ((a,b,c) is null); 
+0

Question subsidiaire: Quel type d'optimiseur préfère? Un opérateur exclusif AND avec des opérateurs OU NON OU inclus? Ou ne fait-il pas une différence? A partir d'une option de lisibilité pure, j'aime le cas où ((a, b, c) est nul) répond mieux que la réponse acceptée du point de vue de la lisibilité. Mais, c'est peut-être du sucre syntaxique? – maplemale