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

Développement SQL Server Discussion :

SQL Server 2008: la requête " not in " de renvoie pas un résultat avec varchar? [2008]


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut SQL Server 2008: la requête " not in " de renvoie pas un résultat avec varchar?
    Bonjour a tous
    Je développe une application, où j’ai eu un petit problème.
    Voici le DDL de mes deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE [dbo].[Eleve](
    	[C_E] [varchar](10) PRIMARY KEY,
    	[Nom_E] [nvarchar](50) NULL,
    	[Prenom_E] [nvarchar](50) NULL)
     
    CREATE TABLE [dbo].[former](
    	[C_E] [varchar](10) NULL REFERENCES Eleve (C_E),
    	[C_Class] [int] NULL)
    Le problème est comme suit : la requête suivante de renvoie pas un résultat tandis qu’elle doit envoyée la troisième ligne (dans l'exemple ci-dessous).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Eleve where Eleve.C_E not in (select former.C_E from former)
    Est ce que « not in » ne fonctionne pas avec le type « varchar » ?
    Si oui qu’elle est la solution ?

    voici un exemple
    Eleve
    C_E Nom_E Prenom_E
    11410 A B
    114100 C D
    114101 E F

    Former
    C_E C_Class
    11410 1
    114100 2
    Merci a tous

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Salut,
    Citation Envoyé par abtialg Voir le message
    Bonjour a tous

    Est ce que « not in » ne fonctionne pas avec le type « varchar » ?
    Si oui qu’elle est la solution ?
    Ta requête est normale, et elle renvoie le resultat attendu avec une telle requête. "not in" désigne une exclusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from Eleve where Eleve.C_E not in (select former.C_E from former)
    Avec ça, tu auras les enregistrements qui ne sont pas compris (sélectionnés) dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select former.C_E from former)
    La meilleur requête qui te convient est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Eleve where Eleve.C_E in (select former.C_E from former)
    Cordialement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Alexandre le Grand Voir le message
    La meilleur requête qui te convient est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select * from Eleve where Eleve.C_E in (select former.C_E from former)
    Merci de ta réponse

    mais le problème persiste et lorsque j'ai fait ces requêtes voici le résultat de chaque une d'elle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select  count(*) from Eleve
    548
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(former.C_E) from former
    456
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Eleve where Eleve.C_E in (select former.C_E from former)
    456
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Eleve where Eleve.C_E not in (select former.C_E from former)
    0
    un tableau NULL

    je suis en attente de vos participations

    Merci d'avance

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par abtialg Voir le message
    Bonjour a tous
    CREATE TABLE [dbo].[former](
    [C_E] [varchar](10) NULL REFERENCES Eleve (C_E),
    [C_Class] [int] NULL)[/CODE]
    La différence entre ces 2 nombres est le résultat des champs vides former.C_E dans la table Former. L'erreur initiale provient du fait [C_E] [varchar](10) NULL REFERENCES Eleve (C_E),, accepte des null alors qu'il ne devrait pas. Parcours tous les enregistrements de la table en question tu trouveras des enregistrements vides sur cette colonne.

    Cordialement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Alexandre le Grand Voir le message
    L'erreur initiale provient du fait [C_E] [varchar](10) NULL REFERENCES Eleve (C_E),, accepte des null alors qu'il ne devrait pas. Parcours tous les enregistrements de la table en question tu trouveras des enregistrements vides sur cette colonne.

    Cordialement.
    Alexandre le Grand tu es vraiment Grand

    Merci infiniment de ta remarque les 3 derniers enregistrements avait une valeur NULL je les ais supprimer et sa marche

    Merci encore Alexandre le Grand

    Post résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/11/2012, 18h38
  2. SQL Server 2008 : Problème requête
    Par kh424 dans le forum Développement
    Réponses: 4
    Dernier message: 07/01/2011, 19h58
  3. [Sql Server 2008] Optimisation requête
    Par lucie.houel dans le forum Développement
    Réponses: 8
    Dernier message: 15/04/2010, 18h59
  4. requête croisée/sql server 2008 avec BI
    Par da_latifa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/10/2009, 21h13

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