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
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
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.
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 ) ?
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...Envoyé par sylverel
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.
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.
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.
Envoyé par sylverel
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
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 ;
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...
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) )
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.
Partager