Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête avec 2 liaisons dans une même table

2 réponses
Avatar
Y a personne
Bonjour,

Soit une table Membres avec mem_id, mem_nom, mem_prenom...
Soit une table Liaisons avec lia_fk_membres1, lia_fk_membres2

La table liaisons permet de lier 2 membres, donc je peux avoir ceci :

1-3
5-4
1-4
5-1
...

Donc le membre 1 est lié à 3 autres membres (3-4-5)

J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.

merci de votre aide

2 réponses

Avatar
Patrick Mevzek
Le Sat, 26 Apr 2008 19:49:27 +0200, Y a personne a écrit:
J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.



Il y a plusieurs façons de faire, par exemple :

SELECT * FROM Membres WHERE mem_id IN
(
SELECT lia_fk_membres1 FROM Liaisons WHERE lia_fk_membres2=1
UNION
SELECT lia_fk_membres2 FROM Liaisons WHERE lia_fk_membres1=1
);

On peut aussi faire des jointures avant ou après l'union.
On peut remplacer l'union par un WHERE avec un OR et un CASE dans la
projection.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
Avatar
Y a personne
Patrick Mevzek a écrit :
Le Sat, 26 Apr 2008 19:49:27 +0200, Y a personne a écrit:
J'essaye en vain d'afficher en une seule requête (My)SQL (nom, prenom)
les 3 membres liés au membre 1.

La difficulté est que 1(ou les autres) peuvent se retrouver dans
lia_fk_membres1 ou lia_fk_membres2.



Il y a plusieurs façons de faire, par exemple :

SELECT * FROM Membres WHERE mem_id IN
(
SELECT lia_fk_membres1 FROM Liaisons WHERE lia_fk_membres2=1
UNION
SELECT lia_fk_membres2 FROM Liaisons WHERE lia_fk_membres1=1
);

On peut aussi faire des jointures avant ou après l'union.
On peut remplacer l'union par un WHERE avec un OR et un CASE dans la
projection.




Merci pour ta réponse rapide.

Ca fonctionne correctement.

J'avais bien testé avec UNION, mais je connaissais pas la technique du IN


merci