IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Comment tester si une valeur est null ou égale à certains chiffres


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut Comment tester si une valeur est null ou égale à certains chiffres
    Bonjour,

    désolé pour le titre peu explicite, mais j'ai pas trouvé mieux.
    Dans ma requête j'avais écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND I.IDPROCEDURE IN (NULL, 6, 15)
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND I.IDPROCEDURE IS NULL OR I.IDPROCEDURE = 6 OR I.IDPROCEDURE = 15
    Aucun des 2 essais ne marche, et je ne vois pas trop comment je peux avoir la condition IDPROCEDURE est nulle ou égale à 6 ou égale à 15.

    Pour information c'est une BDD MySql.
    Toutes vos suggestions sont les bienvenues.
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Tu as essayé de mettres des parenthèses, parce que tu dois avoir plein de AND et OR:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (I.IDPROCEDURE IS NULL OR I.IDPROCEDURE = 6 OR I.IDPROCEDURE = 15)
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ou même combiner les deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND ( I.IDPROCEDURE IS NULL
       OR I.IDPROCEDURE In (6, 15) )

  4. #4
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Avec les parenthèses la requête n'est pas rejetée par MySql mais la condition n'est pas prise en compte.
    J'obtiens le même résultat que si je n'avais pas placé cette condition dans la requête ...

    Voici ma requête complète au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT NOMFRAUDEUR 'NOM', PRENOMFRAUDEUR 'PRENOM', DATENAISSANCEFRAUDEUR 'DATE NAISSANCE', RUEADRESSE 'ADRESSE', COMPLEMENTADRESSE 'COMPLEMENT', CPADRESSE 'CODE POSTAL', COMMUNEADRESSE 'COMMUNE'
    FROM FRAUDEUR F, ADRESSE A, INFRACTION I
    WHERE F.IDFRAUDEUR = A.IDFRAUDEUR
    AND I.IDFRAUDEUR = F.IDFRAUDEUR
    AND I.IDFRAUDEUR IN 
    (
    	SELECT I.IDFRAUDEUR
    	FROM INFRACTION I
    	WHERE I.DATEINFRACTION BETWEEN DATE_SUB(CURDATE(), INTERVAL 12 MONTH) AND CURDATE()
    	AND (I.IDPROCEDURE IS NULL OR I.IDPROCEDURE = 6 OR I.IDPROCEDURE = 15)
    	AND I.IDINFRACTION NOT IN
    	(
    		SELECT IDINFRACTION
    		FROM REGLEMENT
    	)
    	GROUP BY IDFRAUDEUR
    	HAVING COUNT(IDINFRACTION) BETWEEN 6 AND 10
    )
    C'est une BDD qui gère les chenapans qui montent dans le bus sans payer


    PS même punition quand j'utilise le code proposé par Waldar
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  5. #5
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Bon ben si c'est pour les contrôleurs, je vais pas pouvoir t'aider... A moins que tu puisses effacer mes amendes ??

    Bon sinon, j'ai une question: Le problème, si j'ai bien compris, c'est qu'il prends pas en compte la condition I.IDPROCEDURE=?

    Il affiche donc toutes les lignes quelque soit la valeur de I.IDPROCEDURE?
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il nous faudrait un petit jeu d'essai qui pose problème pour aller plus loin, il n'y a pas de raison que le filtre ne s'applique pas.

  7. #7
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Waldar tu entends quoi par un "petit jeu d'essais" ?

    Citation Envoyé par mactwist69 Voir le message
    Bon ben si c'est pour les contrôleurs, je vais pas pouvoir t'aider... A moins que tu puisses effacer mes amendes ??
    Bien sûr pas de soucis ... je travaille sur une copie de test de la base

    Citation Envoyé par mactwist69 Voir le message
    Bon sinon, j'ai une question: Le problème, si j'ai bien compris, c'est qu'il prends pas en compte la condition I.IDPROCEDURE=?

    Il affiche donc toutes les lignes quelque soit la valeur de I.IDPROCEDURE?
    Voilà c'est le problème : j'ai le cas typique d'une fraudeuse qui a 7 procédures. 3 nulles, et les autres sont des 4,8,9,15.
    Je devrais donc avoir 4 résultats (les 3 nulles + la 15), mais j'obtiens les 7.
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Des données de vos tables (5 ou 10 lignes par table max), avec évidement un cas qui pose problème.

    Données réelles ou titi toto, peu importe, à votre convenance tant qu'elles suivent la même logique que vos données réelles.

    Si en plus vous mettez les scripts des tables (colonnes utiles uniquement), ce serait parfait !

    Ca permet de tester ce qu'on vous propose.

  9. #9
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Mmm en fait quand je mets un DISTINCT après le select ça me sort des résultats cohérents.

    A savoir que les noms des gens qui sortent sont ceux qui ont le nombre d'infraction indiqué dans la requête.

    Vous avez une idée de comment je pourrais obtenir le nombre d'infractions affiché à côté de leurs infos persos ?
    C'est pas inpératif, mais je sens que les contrôleurs vont me le demander dans un ou deux mois
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

Discussions similaires

  1. [RegEx] Comment tester si une valeur est composée de chiffres ?
    Par syrine01 dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2013, 09h58
  2. Réponses: 0
    Dernier message: 21/08/2013, 12h05
  3. Comment tester si une valeur de type entier est nulle ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2009, 00h53
  4. Comment tester qu'une valeur est dans un tableau ?
    Par Pierrot92320 dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/04/2009, 18h59
  5. Comment vérifier qu'une valeur est NULL ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2006, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo