Requête SQL
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
j'aurais voulu savoir comment réaliser la requête désirée sachant que mes tables ont pour structure :
membre :
ID | pseudo ...
amis :
ID | ID_membre1 | ID_membre2
Je voudrais sélectionner les ID de amis pour lesquels l'ID_membre1 correspond à un certain pseudo d'un membre et l'ID_membre2 à un autre pseudo.
Merci d'avance.
j'aurais voulu savoir comment réaliser la requête désirée sachant que mes tables ont pour structure :
membre :
ID | pseudo ...
amis :
ID | ID_membre1 | ID_membre2
Je voudrais sélectionner les ID de amis pour lesquels l'ID_membre1 correspond à un certain pseudo d'un membre et l'ID_membre2 à un autre pseudo.
Merci d'avance.
A voir également:
- Requête SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
4 réponses
Tout d'abord merci de m'avoir répondu.
Mais je voudrais en fait avoir les ID de amis où le ID_membre1 de amis correspond à un membre et ou le ID_membre2 correspond à un AUTRE membre.
Par exemple si dans membres j'ai :
ID| pseudo
1 | truc1
2 | truc2
3 | truc3
et si j'ai dans amis :
ID | ID_membre1 | ID_membre2
1 | 1 | 2
2 | 2 | 3
Et bien il faut que avec ma requête, si je défini le premier pseudo comme truc1 et le second comme truc2 ma requête me renvoie 1 car dans amis le tuple, où le membre 1 est truc1 et ou le membre 2 est truc2 est celui où l'ID est 1.
Autre exemple, si je choisis le premier pseudo comme truc1 et truc3 il n'y aura aucun résultat.
Mais je voudrais en fait avoir les ID de amis où le ID_membre1 de amis correspond à un membre et ou le ID_membre2 correspond à un AUTRE membre.
Par exemple si dans membres j'ai :
ID| pseudo
1 | truc1
2 | truc2
3 | truc3
et si j'ai dans amis :
ID | ID_membre1 | ID_membre2
1 | 1 | 2
2 | 2 | 3
Et bien il faut que avec ma requête, si je défini le premier pseudo comme truc1 et le second comme truc2 ma requête me renvoie 1 car dans amis le tuple, où le membre 1 est truc1 et ou le membre 2 est truc2 est celui où l'ID est 1.
Autre exemple, si je choisis le premier pseudo comme truc1 et truc3 il n'y aura aucun résultat.
Le problème est que dans ton exemple si tu cherches truc2 et truc3 tu vas obtenir 2 mais si tu cherches truc3 et truc2 tu n'auras aucun résultat.
Tu peux faire une réunion des n-uplets trouvés avec ('truc3','truc2') avec les n-uplets trouvés avec ('truc2','truc3'). Comme ça :
Tu peux faire une réunion des n-uplets trouvés avec ('truc3','truc2') avec les n-uplets trouvés avec ('truc2','truc3'). Comme ça :
SELECT ID FROM amis WHERE ID_membre1=(SELECT ID FROM membres WHERE pseudo='truc3') AND ID_membre2=(SELECT ID FROM membres WHERE pseudo='truc2') UNION SELECT ID FROM amis WHERE ID_membre1=(SELECT ID FROM membres WHERE pseudo='truc2') AND ID_membre2=(SELECT ID FROM membres WHERE pseudo='truc3');C'est un peu lourd mais bon.
Ok, c'est bon ça marche merci bien.
Par contre j'aurais voulu savoir quelle était la différence entre faire :
SELECT ID FROM amis
WHERE ID_membre1=(SELECT ID FROM membres WHERE pseudo='truc3')
AND ID_membre2=(SELECT ID FROM membres WHERE pseudo='truc2')
et
SELECT ID FROM amis
WHERE ID_membre1 IN (SELECT ID FROM membres WHERE pseudo='truc3')
AND ID_membre2 IN (SELECT ID FROM membres WHERE pseudo='truc2')
En fait, quelle est la différence entre = et IN.
Par contre j'aurais voulu savoir quelle était la différence entre faire :
SELECT ID FROM amis
WHERE ID_membre1=(SELECT ID FROM membres WHERE pseudo='truc3')
AND ID_membre2=(SELECT ID FROM membres WHERE pseudo='truc2')
et
SELECT ID FROM amis
WHERE ID_membre1 IN (SELECT ID FROM membres WHERE pseudo='truc3')
AND ID_membre2 IN (SELECT ID FROM membres WHERE pseudo='truc2')
En fait, quelle est la différence entre = et IN.
En fait, quelle est la différence entre = et IN.
Le = sert lorsque la sous-requête ne renvoie qu'un enregistrement.
Le IN sert lui lorsque la sous-requête renvoie plusieurs enregistrements.
C'est pas très clair. Un exemple :
Pour les tables personne(id_personne, nom_personne) et fonction(id_personne, fonction) on a les enregistrements :
personne(1, 'Martin Dupont')
personne(2, 'Sophie Lalanne')
personne(3, 'Eleonore Guinier')
personne(4, 'Michel Touquet' )
fonction(1, 'Intendant')
fonction(1, 'Responsable technique')
fonction(1, 'Chef de projet')
fonction(2, 'Hôtesse d'accueil')
fonction(2, 'Assistant')
fonction(2, 'Secrétaire')
fonction(3, 'Secrétaire')
fonction(3, 'Hôtesse d'accueil')
fonction(3, 'Assistant')
fonction(4, 'Secrétaire')
fonction(4, 'Comptable')
Je cherche le personnel qui est à la fois 'assistant' et 'secrétaire'.
Rappelons d'abord que la requête suivante ne marche pas car un même champs ne peut pas avoir les valeurs 'secrétaire' et 'assistant' en même temps (aucun enregistrement ne sera renvoyé) :
On peut utiliser les requêtes imbriquées : on commence par sélectionner le personnel qui est secrétaire et ensuite, parmi le personnel secrétaire on sélectionne celui qui est 'assistant' :
Dans l'exemple la sous-requête renverra tous les secrétaires soit les id_personne 2,3,4
La requête renverra tous les id_personne à la fois secrétaires et assistants, soit les 2 et 3
Le = sert lorsque la sous-requête ne renvoie qu'un enregistrement.
Le IN sert lui lorsque la sous-requête renvoie plusieurs enregistrements.
C'est pas très clair. Un exemple :
Pour les tables personne(id_personne, nom_personne) et fonction(id_personne, fonction) on a les enregistrements :
personne(1, 'Martin Dupont')
personne(2, 'Sophie Lalanne')
personne(3, 'Eleonore Guinier')
personne(4, 'Michel Touquet' )
fonction(1, 'Intendant')
fonction(1, 'Responsable technique')
fonction(1, 'Chef de projet')
fonction(2, 'Hôtesse d'accueil')
fonction(2, 'Assistant')
fonction(2, 'Secrétaire')
fonction(3, 'Secrétaire')
fonction(3, 'Hôtesse d'accueil')
fonction(3, 'Assistant')
fonction(4, 'Secrétaire')
fonction(4, 'Comptable')
Je cherche le personnel qui est à la fois 'assistant' et 'secrétaire'.
Rappelons d'abord que la requête suivante ne marche pas car un même champs ne peut pas avoir les valeurs 'secrétaire' et 'assistant' en même temps (aucun enregistrement ne sera renvoyé) :
SELECT nom_personne FROM personne p, fonction f WHERE fonction='secrétaire' AND fonction='assistant';
On peut utiliser les requêtes imbriquées : on commence par sélectionner le personnel qui est secrétaire et ensuite, parmi le personnel secrétaire on sélectionne celui qui est 'assistant' :
SELECT nom_personne FROM personne p, fonction f WHERE p.id_personne IN (SELECT p.id_personne FROM personne p, fonction f WHERE fonction='secrétaire') AND fonction='assistant';
Dans l'exemple la sous-requête renverra tous les secrétaires soit les id_personne 2,3,4
La requête renverra tous les id_personne à la fois secrétaires et assistants, soit les 2 et 3