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 :

Clause NOT IN dans une clé composée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    test
    Inscrit en
    Mai 2016
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2016
    Messages : 347
    Par défaut Clause NOT IN dans une clé composée
    Bonjour a tous ,

    Comment je peux utilisé la clause not in avec un clé primaire composé j'ai essayé d'utiliser le concat mais c'est très lent le but c'est d'avoir le not existant dans ma table B depuis le table A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select cod_prd,cod_cel,num_f,num_evt from TableA  where concat(cod_prd,cod_cel,num_f,num_evt) not in (select concat(cod_prd,cod_cel,num_f,num_evt) from tableB)

    Merci pour vos aides

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 475
    Par défaut
    Bonjour,
    Ta requête est lente car l'utilisation de CONCAT ici empêche toute utilisation d'un index.
    Tu peux remplacer le NOT IN par un NOT EXIST et utiliser une sous-requête corrélée :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select cod_prd,cod_cel,num_f,num_evt from TableA  
    where not exist
        (select 1 from tableB where tableB.cod_prd = tableA.cod_prd and tableB.cod_cel = tableA.cod_cel and tableB.num_f = tableA.num_f and tableB.num_evt = tableA.num_evt)

    D'ailleurs CONCAT risque de te donner des faux positifs, puisque CONCAT('A,'BC') = CONCAT('AB','C')...

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 654
    Billets dans le blog
    10
    Par défaut
    C'est même préférable, (NOT) EXISTS sera souvent plus performant que (NOT) IN

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2014, 12h39
  2. SQL 2005 Clause ORDER BY dans une vue
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2011, 18h18
  3. Utiliser Not In avec une clé composée
    Par smail21 dans le forum Bases de données
    Réponses: 10
    Dernier message: 14/01/2008, 16h25
  4. Réponses: 1
    Dernier message: 26/09/2007, 17h50
  5. Recordset not updatable dans une requete ou dans un formulaire
    Par debdev dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/07/2006, 12h45

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