Requête SQL

Résolu
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.

4 réponses

Hreidmarr666
 
select ID from amis a, membre m where m.ID_membre1=a.ID or m.ID_membre2=a.ID

voilou
0
Utilisateur anonyme
 
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.
0
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
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 :
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.
0
Utilisateur anonyme
 
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.
0
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
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é) :
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
0
Utilisateur anonyme
 
C'est bon j'ai compris, problème résolu.
Merci.
0