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 :

select exclusif sur une clé multiple


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut select exclusif sur une clé multiple
    Bonjour,

    je souhaite faire un select qui ne conserve que les lignes ne contenant pas dans les 3 premières colonnes ni a b c, ni j k l

    La clé multiple est composée des colonnes w + x + y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    w x y z
    -------
    a b c 1
    a b c 2
    d e f 1
    g h i 3
    j k l 1
    m n o 1
    résultat souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    w x y z
    -------
    d e f 1
    g h i 3
    m n o 1
    select w, x, y, z from T where ???


    rq : J'ai essayé de déjouer le pb en faisant une concaténation des 3 colonnes, mais comme c'est des identifiants générés par le SGBD et pas de bêtes valeurs ce n'est pas possible.
    Et de toutes façons j'aimerais trouver une réponse plus satisfaisante.
    Je suis sur SQL Server 2005, mais js'agit d'une question de SQL générale

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Avec NOT IN je pense, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where champ not in('a','b','c')

  3. #3
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Je vois pas le truc là.
    Tu veux dire ça ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from T where (w,x,y) not in (a,b,c) and not in (i,j,k)
    ?
    Ca ne fonctionne pas. Ou alors je n'écris pas la bonne syntaxe Transac-SQL.


    J'ai aussi pensé à du , mais j'y arrive pas.

  4. #4
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    non je veux dire ou qqch dans le genre (j'ai pas tout pigé à tes rêgles de gestion)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    where w not in ('a','b','c') 
    and x not  in ('a','b','c') 
    and y  in ('a','b','c')

  5. #5
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Ah OK, non, c'est justement ça mon problème, c'est une exclusion par triplets :

    il me faut (w,x,y) différent de ('a','b','c')

    mais par exemple ('a', 'b', 'd') est correct.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 098
    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 098
    Points : 28 406
    Points
    28 406
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from T 
    where (w, x, y) not in (select 'a', 'b', 'c') 
        and (w, x, y) not in (select 'i', 'j', 'k')
    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.

  7. #7
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Voilà, c'est qqch comme ça qu'il me faut.
    Mais ça ne marche pas non plus : peut-être une syntaxe spécifique à Transact SQL ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from GPU where (GRP_ID,PRF_ID,USR_ID) not in (select '22222222-2222-2222-2222-222222222222','22222222-2222-2222-2222-222222222222','22222222-2222-2222-2222-222222222222')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ','.

  8. #8
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Révélation !
    Il suffit "d'inverser" les conditions (<> and <>)par not(= and =) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM T
    WHERE NOT (w = 'a' AND x = 'b' AND z = 'c') 
    AND NOT (w = 'i' AND x = 'j' AND z = 'k')
    Merci à vous 2.

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

Discussions similaires

  1. Lancer une procédure avec "Worksheet_Change" sur une sélection multiple
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2008, 11h29
  2. [2005] Lock exclusif sur une table
    Par Ptit_Dje dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/05/2008, 18h54
  3. Select box sur une variable
    Par elfenlieder dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 13/11/2007, 11h26
  4. Regrouper les champs sur une jointure multiple
    Par Grégory PLANCHAT dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/09/2007, 12h16
  5. Gestion des erreurs sur une commande multiple
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 15h03

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