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 :

Inclure un where + if not exists


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 37
    Points
    37
    Par défaut Inclure un where + if not exists
    Bonjour j'aimerais modifier un insert pour faire en sorte de ne pas prendre en compte si une FK existe déjà je m'explique :
    j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     insert into V0 ( valeurs...)
     
    select distinct (l''ensemble de ma table V0bis)
     
    FROM V0bis
    inner join V1 sur id 
    inner join V2 sur id2
     
    where 
    V4.cont = parametre and id.V0
    Ce que je souhaiterais c'est ne pas insérer dans ma table V0 les valeurs si l'id.V0 existe déjà

    pourriez vous me dire si c'est clair et comment gérer côté syntaxe ?

    merci d'avance

  2. #2
    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
    Et bien... exactement ce que vous avez mis en sujet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO V0 ( valeurs...)
    SELECT DISTINCT (l''ensemble de ma TABLE V0bis)
      FROM V0bis
      JOIN V1 ON id ...
      JOIN V2 ON id2...
     WHERE V4.cont = parametre
       AND NOT EXISTS (SELECT NULL
                         FROM V0
                        WHERE V0.PK = V0BIS.PK);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 37
    Points
    37
    Par défaut
    Je vois ou je me trompais dans la syntaxe ... comment décrire fonctionnellement le select NULL ?

    qu'elle différence avec un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO V0 ( valeurs...)
    SELECT DISTINCT (l''ensemble de ma TABLE V0bis)
      FROM V0bis
      JOIN V1 ON id ...
      JOIN V2 ON id2...
     WHERE V4.cont = parametre
       AND V0.id not in ( selec v0bis.id from v0bis)

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Le SELECT NULL n'a pas de signification particulière avec EXISTS. Tu peux aussi bien écrire SELECT 1 ou SELECT * ou n'importe quoi d'autre.
    Par définition EXISTS recherche s'il y a au moins une ligne retournée par la requête, pas les valeurs retournées.

    Edit:
    Quant à la différence avec IN, il faut voir avec le plan d'exécution comment ton SGBD prend en compte les deux manières de faire. Certains SGBD exécutent toute la sous-requête liée au IN avant de vérifier si la valeur est dans la liste.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 37
    Points
    37
    Par défaut
    Merci, je commence a vraiment apprécier le SQL

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

Discussions similaires

  1. SQL SELECT WHERE NOT EXISTS
    Par talietotoro dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/08/2023, 07h27
  2. Améliorer une requete where not exists
    Par first racing dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/11/2010, 17h10
  3. Update Where not Exists
    Par wclef dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2010, 10h50
  4. A propos de la clause "Where NOT EXIST"
    Par Bouga74 dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 19/06/2009, 15h26
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

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