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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    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.

  2. #2
    Membre Expert 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 : 41
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    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)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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 très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    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

  5. #5
    Membre Expert 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 : 41
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    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?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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 très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    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.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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 très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    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

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