J'ai deux tableaux décrits ci-dessous:

Transactions
ID | Buyer | Seller
-------------------
 1 |   1   |   2
 2 |   1   |   3
 3 |   2   |   3

ClientData
ID | Name
---------
 1 | John
 2 | Terry
 3 | Bob

Je souhaite pouvoir exécuter une requête qui renverra l'ID de transaction et les noms des clients au lieu de l'ID de l'acheteur et du vendeur. Je sais que JOIN sera utilisé pour cela, mais tous les exemples que j'ai rencontrés ne semblent fonctionner qu'avec un seul ID associé, où cela doit le faire deux fois dans la requête. Est-ce qu'une jointure est la bonne façon de faire cela, ou devrais-je examiner peut-être une sous-requête à l'intérieur de la requête?

SELECT Transactions.ID, Transactions.Buyer, Transactions.Seller 
FROM Transactions 
INNER JOIN ClientData ON Transactions.Buyer=ClientData.ID
AND Transaction.Seller=ClientData.ID

Cette requête ne renvoie aucune donnée, et si j'éloigne le

AND Transaction.Seller=ClientData.ID

À partir de la requête, il renvoie simplement les données brutes des transactions. Auparavant, je lisais simplement les données de transactions brutes dans un tableau, puis je bouclais le tableau et remplaçais manuellement l'ID acheteur et vendeur par le nom du client, mais c'est incroyablement inefficace.

1
Sean Perryman 31 déc. 2015 à 03:36

2 réponses

Meilleure réponse

Est-ce que ça marche pour toi?

SELECT t.ID, b.Name, s.Name 
FROM Transactions t
INNER JOIN ClientData b ON t.Buyer=b.ID
INNER JOIN ClientData s ON t.Seller=s.ID
4
Tim Biegeleisen 31 déc. 2015 à 00:45

J'utiliserais 2 jointures, une pour l'acheteur et une pour le vendeur, comme ceci:

SELECT Transactions.ID, BUYER.NAME, SELLER.NAME
FROM transactions T
JOIN Clientdata BUYER
ON T.BUYER=BUYER.ID
JOIN Clientdata SELLER
ON T.SELLER=SELLER.ID
1
tylermoseley 31 déc. 2015 à 00:45