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 :

Requête ne contient pas les collaborateurs n'étant pas à Marseille


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut Requête ne contient pas les collaborateurs n'étant pas à Marseille
    Bonjour ,
    j'ai une table dans cette table plusieurs enregistrements
    par exemple.
    Colaborateur | ville
    col1 | nantes
    col1 | paris
    col1 | marseille
    col2 | nantes
    col2 | paris
    col2 | marseille
    col3 | nantes
    col3 | paris
    col4 | nantes
    col4 | paris
    col4 | marseille

    je souhaiterais avoir les colaborateurs n'étant pas à marseille,
    contrainte:
    sans utilisé de requête imbriquée juste avec un opérateur

    par exemple
    select colaborateur, ville from Table
    where ville ne contient pas marseille

    Est ce possible, je prends toutes suggestions?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE VILLE <> 'Marseille'
    Vous pouvez aussi remplacer "<>" par NOT LIKE avec "%" ou encore par NOT IN.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Non sa aurait été beaucoup trop simple .
    COL 1
    COL 2
    COL 4 seront présent car ils ont aussi une ville différente à marseille donc le <> ne fonctionne pas.
    il faudrait un différent de l'ensemble des villes

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut C'est correct
    Magnus a répondu correctement à la question initiale.
    Avec le prédicat ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE VILLE Not LIKE  'Marseille%'
    on liste toutes les lignes qui ne contiennent pas Marseille, casse des caractères respectée, dans la colonne VILLE !

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    on n'arrive toujours au même problème.
    WHERE VILLE NOT LIKE 'Marseille%'
    va me sortir tous les collaborateurs alors que dans notre cas je veux que le collaborateur 3.
    S'est vraiment pas évident comme cas.
    Je ne vois aucun opérateur qui permettrais ca enfin s'est pour ca que je vous le demande.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Ah d'accord, il fallait être plus précis
    Vous ne voulez que les collaborateurs qui ne sont pas associés à Marseille ?
    Si c'est le cas alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COLLABORATEUR
    FROM   MYTABLE A
    WHERE  NOT EXISTS (SELECT *
                       FROM   MYTABLE B
                       WHERE  A.COLLABORATEUR = B.COLLABORATEUR
                              AND B.VILLE = 'Marseille')

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Juste avec une opérande, car une requête imbriquée demande une charge conséquante de correctif sur mon requêteur. Voilà s'est mes contraintes.
    Car si je pars sur la solution de requête imbriquée je pars sur une charge de 10j
    hors juste modifier l'opérateur seulement en charge derrière je n'aurais 1j.

  8. #8
    Membre chevronné
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Par défaut
    bonjour,

    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select collaborateur,ville from collab where collaborateur
     not in (SELECT collaborateur FROM collab  where ville =  'tunis');

  9. #9
    Membre émérite Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Par défaut
    si je pars sur la solution de requête imbriquée je pars sur une charge de 10j
    hors juste modifier l'opérateur seulement en charge derrière je n'aurais 1j.
    Le problème c'est que dans ce cas précis, seul une sous-requête peut te renvoyer le résultat attendu.

    .

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    OK, d'après vous cela est impossible avec seulement une opérande.
    Je vais donc passer au plan B .
    Merci quand même .

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 023
    Billets dans le blog
    6
    Par défaut
    Il n'y a pas en effet de solution sans sous requête. La plus performante étant dans ce cas la forme en NOT EXISTS.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  12. #12
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Bonjour,
    juste une petite idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select a.collaborateur, a.ville 
    from Table a,
           Table b
    where a.ville <> 'Marseille' and
             b.collaborateur <> a.collaborateur and
             b.ville = 'Marseille'
    group by a.collaborateur, a.ville
    Mais attention aux perf...

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 023
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 023
    Billets dans le blog
    6
    Par défaut
    Marche pas...

    Démo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TABLE T_COLVIL
    (Colaborateur VARCHAR(8), 
     ville        VARCHAR(16))
     
    INSERT INTO T_COLVIL VALUES ('col1', 'nantes')
    INSERT INTO T_COLVIL VALUES ('col1', 'paris')
    INSERT INTO T_COLVIL VALUES ('col1', 'marseille')
    INSERT INTO T_COLVIL VALUES ('col2', 'nantes')
    INSERT INTO T_COLVIL VALUES ('col2', 'paris')
    INSERT INTO T_COLVIL VALUES ('col2', 'marseille')
    INSERT INTO T_COLVIL VALUES ('col3', 'nantes')
    INSERT INTO T_COLVIL VALUES ('col3', 'paris')
    INSERT INTO T_COLVIL VALUES ('col4', 'nantes')
    INSERT INTO T_COLVIL VALUES ('col4', 'paris')
    INSERT INTO T_COLVIL VALUES ('col4', 'marseille')
    INSERT INTO T_COLVIL VALUES (NULL, 'marseille')
    INSERT INTO T_COLVIL VALUES (NULL, 'paris')
    INSERT INTO T_COLVIL VALUES ('COL2', NULL)
    INSERT INTO T_COLVIL VALUES ('COL5', NULL)
     
    SELECT DISTINCT a.Colaborateur--, a.ville 
    FROM T_COLVIL a,
           T_COLVIL b
    WHERE a.ville <> 'marseille' AND
             b.Colaborateur <> a.Colaborateur AND
             b.ville = 'marseille'
    GROUP BY a.Colaborateur, a.ville
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Colaborateur 
    ------------ 
    col1
    col2
    col3
    col4
    Or seul Col3 et Col5 réponde a cette problématique.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  14. #14
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Oui effectivement ça marche pas du tout, grosse con.... de ma part ! désolé..

  15. #15
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    Bon, allez je retente ma chance (ça marche sous Oracle, vieille syntaxe des joins à changer les '+' en outer join...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.colaborateur,count(b.colaborateur)
    FROM T_COLVIL a,
           T_COLVIL b
    WHERE (a.ville <> 'marseille'  or a.ville is null) AND
           b.colaborateur(+) = a.colaborateur and
             b.ville(+) = 'marseille' 
    group by a.colaborateur
    having count(b.colaborateur) = 0 and
             a.colaborateur is not null

  16. #16
    Membre éprouvé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Par défaut
    On peut aussi utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT colaborateur
    FROM	 t_colvil
    MINUS
    SELECT DISTINCT colaborateur
    FROM	 t_colvil
    WHERE	 ville = 'marseille';

  17. #17
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Et avec quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select colaborateur
    from t_colvil
    group by colaborateur
    having Sum(decode(ville,'marseille',1,0)) =0

  18. #18
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Bonjour, je vois que ma petite requête qui à l'aire de rien fait travailler les neuronnes, sa fait plaisir.
    Pour la solution de tofalu le decode n'est pas reconnu je suis sous sql serveur,
    cependant je vois pas se que cette fonction effectue dans notre cas.
    Peux tu m'expliquer?

  19. #19
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Decode remplace des valeurs par une autre.

    Tu peux utiliser un CASE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT colaborateur
    FROM t_colvil
    GROUP BY colaborateur
    HAVING
      SUM(CASE VILLE
        WHEN 'marseille' THEN 1
        ELSE 0
      END) =0

  20. #20
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 86
    Par défaut
    Merci pour cette réponse pertinante, cependant il est vrai que je n'ai pas donné toutes mes contraintes car mon requêteur gère différentes choses les parenthèses et les conditions : ou,et
    donc dans notre cas sa fonctionne mais se n'était qu'un exemple.

    Prenons par exemple un autre champs age et une autre fonction,
    ( champ{age} < 50 or fonction = developpeur or "nabitant pas à marseille")
    AND
    (condition2)
    mon requeteur construit ma requête ligne par ligne en suivant les conditions et les prioritées "(" ")".

    La solution serait vraiment d'isolé cette condition pour pouvoir l'ajouté ainsi de suite.
    Ce qui me gène dans le cas de Tofalu est le having et group by.
    merci beaucoup

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/04/2011, 11h39
  2. Les filtre ADO n'aime pas les espaces
    Par antoinelac dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/01/2009, 16h15
  3. Réponses: 4
    Dernier message: 03/03/2008, 17h31
  4. Insérer uniquement les données d'un dump (pas les tables) ?
    Par ctobini dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/10/2007, 18h34
  5. Les images ne s'affichent pas et le css n'est pas appliqué sur mon site en ligne
    Par landar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/03/2007, 20h47

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