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 :

[SQL]: Requête NOT IN SELECT(...)


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Points : 8
    Points
    8
    Par défaut [SQL]: Requête NOT IN SELECT(...)
    bonjour,

    j ai un probleme de conception de requete

    Exemple de ma table T_EMPLOYE
    Nom Societe
    Pierre X
    Pierre Y
    Paul X
    Paul Y
    Jacques X


    Exemple de ma table T_RESULTAT:
    Nom Societe
    Pierre X
    Paul Y


    Je souhaite insérer ds la table T_RESULTAT les enregistrements de T_EMPLOYE, en evitant d inserer les valeurs existantes (pas de doublons sur les champs nom et societe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    INSERT INTO T_RESULTAT (nom,societe)
     
                       SELECT nom,societe
                       FROM T_EMPLOYE
                       WHERE nom not in (select nom from t_resultat)
    mon code sql fonctionne, mais n'insere pas si la societe est differente pour un même nom.

    comment completer mon code sql ?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Ton moteur autorise-t-il les "Row Value Constructor" ?

  3. #3
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Salut,

    et pourquoi ne pas faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    INSERT INTO T_RESULTAT (nom,societe)
     
                     ( SELECT nom,societe
                       FROM T_EMPLOYE
                       MINUS
                       SELECT nom,societe
                       FROM T_RESULTAT )

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    SELECT nom, societe
    FROM t_employe minus
    SELECT nom, societe
    FROM t_resultat

    la requete s execute, mais ne me fait pas la difference, et surtout et impossible à s enregistrer sous enterprise manager de sql server

  5. #5
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    MINUS n'existe pas sous SQL Server.

    La solution est proche de que celle que tu proposais , sachant que les IN sur plus d'un élement ne fonctionnent pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    INSERT INTO T_RESULTAT (nom,societe) 
    SELECT T1.nom, T1.societe 
    FROM T_EMPLOYE T1
    WHERE 
    NOT EXISTS 
             (
             select T2.nom, T2.societe 
             -- on peut  remplacer  T2.nom, T2.societe par une constante comme 1
             FROM T_RESULTAT T2
             WHERE
             T1.nom=T2.nom AND 
             T2.nom=T2.societé AND 
             )
    Attention il faut éviter au maximum les jointures et les clauses WHERE sur des champs libellés: Il faut privilégier systématiquement celles-ci sur des identifiants (indexés il va de soi).

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

Discussions similaires

  1. [SQL] Requête SELECT avec un paramètre pour choisir une colonne
    Par svergeylen dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/12/2007, 17h36
  2. [SQL] requête SELECT impossible
    Par loopback dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/11/2007, 18h57
  3. sql requête avec NOT EXISTS
    Par wang_xue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/10/2007, 19h48
  4. Optimisation de requêtes SQL - utilisation de IN SELECT
    Par cfeltz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/12/2006, 09h28
  5. [SQL] requète de selection
    Par ben_skywalker dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2006, 11h24

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