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 :

tous les enreg d'un champ contenant tous les enregistrements d'un autre champ


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut tous les enreg d'un champ contenant tous les enregistrements d'un autre champ
    Bonjour,
    Je suis coincé pour un petit problème.
    Voilà, j'ai une table TRAVAILLER contenant deux champs : Personne et Lieu.
    J'aimerai trouver comment obtenir les personnes qui ont fréquenté tous les lieux.
    D'avance merci

  2. #2
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Vos termes sont inexacts.
    J'imagine que vous avez une table LIEU ?
    Dans tous les cas, donnez nous un jeu d'essai minimal.
    Pensez aussi à indiquer votre SGBD et sa version.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Il s'agit d'une question théorique. le but de ma démarche est d'avoir une solution en langage SQL pour obtenir tous les enregistrements d'une table qui présentent pour un champ, toutes les solutions possibles pour un autre champ.
    exemple avec jeu d'essai :

    Personne Lieu

    Toto France
    Titi Allemagne
    Tata Portugal
    Toto Allemagne
    Tutu Portugal
    Tutu Espagne
    Tata Espagne
    Toto Angleterre
    Tete Angleterre
    Toto Espagne

    Il y a 5 pays dans le champ Lieu. Seul Toto a été dans tous les pays. Par conséquent il remplit les conditions demandées. Ma question est de savoir comment obtenir Toto en langage SQL.

    Comment obtenir par ailleurs les personnes qui ont toujours travaillé ensemble (exemple :Tata et Tutu ) ?

  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 802
    Points
    30 802
    Par défaut
    Citation Envoyé par sylverel
    Comment obtenir par ailleurs les personnes qui ont toujours travaillé ensemble (exemple :Tata et Tutu ) ?
    Comment savoir qu'ils étaient ensemble ? D'après le contenu de la table, je sais qu'ils ont été dans les mêmes pays, mais je n'ai aucune connaissance de la période à laquelle chacun s'y trouvait...
    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
    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 802
    Points
    30 802
    Par défaut
    Pour la première question, le simple fait d'énoncer le problème donne la structure de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select personne
    from travailler
    group by personne
    having count(distinct lieu) =  ( select count(distinct lieu)
             from travailler
            )
    ;
    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.

  6. #6
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Ah ouais, tiens moi j'aurais fait un NOT EXISTS sur le couple (personne, lieu) mais ce qui compte c'est que le résultat soit celui attendu.
    A voir donc selon les performances.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  7. #7
    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 802
    Points
    30 802
    Par défaut
    Citation Envoyé par Magnus
    Ah ouais, tiens moi j'aurais fait un NOT EXISTS sur le couple (personne, lieu)
    Je suis curieux de savoir comment tu fais...
    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.

  8. #8
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par al1_24
    Je suis curieux de savoir comment tu fais...
    Si si ça se fait : j'avais vu ça à la fac avec 3 tables :
    - personne
    - lieu
    - visiter

    Le principe consistait à utiliser 2 requêtes imbriquées (donc sur 3 niveaux) en utilisant l'ensemble complémentaire du suivant : "les personnes qui n'ont pas fréquenté au moins un des lieux".

    Je ne suis pas à l'aise avec ce genre de requêtes donc je ne te promets pas de pouvoir te la donner mais peut être y arriveras-tu avant moi avec ces indications ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    que pensez vous de la requête suivante pour trouver les personnes qui ont toujours travaillé ensemble (qui revient à dire qu'ils ont toujours fréquenté les mêmes lieux )?
    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
    SELECT T1.PERSONNE,
           T2.PERSONNE
    FROM   A_TRAVAILLé T1,
           A_TRAVAILLé T2
    WHERE  NOT EXISTS (SELECT *
                       FROM   A_TRAVAILLé T3
                       WHERE  T3.PERSONNE = T1.PERSONNE
                              AND NOT EXISTS (SELECT *
                                              FROM   A_TRAVAILLé T4
                                              WHERE  T4.PERSONNE = T2.PERSONNE
                                                     AND T4.LIEU = T3.LIEU))
           AND NOT EXISTS (SELECT *
                           FROM   A_TRAVAILLé T3
                           WHERE  T3.PERSONNE = T2.PERSONNE
                                  AND NOT EXISTS (SELECT *
                                                  FROM   A_TRAVAILLé T4
                                                  WHERE  T4.PERSONNE = T1.PERSONNE
                                                         AND T4.LIEU = L3.LIEU));

  10. #10
    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 802
    Points
    30 802
    Par défaut
    Citation Envoyé par sylverel
    Comment obtenir par ailleurs les personnes qui ont toujours travaillé ensemble (exemple :Tata et Tutu ) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select L1.LIEU
     , L1.PERSONNE
     , L2.PERSONNE
    from TRAVAILLER as L1
     inner   join
      TRAVAILLER as L2
      on L2.LIEU = L1.LIEU
      and L2.PERSONNE > L1.PERSONNE
    ;
    S'ils ne doivent avoir travaillé que dans un seul lieu, il suffit d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    where not exists ( select 1
          from TRAVAILLER as L3
          where L3.LIEU <> L1.LIEU
           and L3.PERSONNE in (L2.PERSONNE, L1.PERSONNE)
         )
    PS : La liste des valeurs retournées par la requête référence par EXISTS n'est pas utilisée. Dans ces conditions, si le SGBD n'est pas optimisé, utiliser select * peut être contre performant...
    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.

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/08/2012, 17h08
  2. Réponses: 8
    Dernier message: 27/06/2012, 06h42
  3. Comment ajouter des champs a partir des valeurs d'un autre champ ?
    Par zerkz dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/05/2007, 12h05
  4. Réponses: 21
    Dernier message: 21/04/2007, 08h00
  5. Réponses: 4
    Dernier message: 25/09/2006, 14h36

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