2011-08-08 4 views
1

Schéma: tblCusotmers stocke les clients, tblAddresses stocke leurs adresses, chaque client a plusieurs adresses;MySQL Débutant Joindre Requête

tblCustomers customer_id: 1 : XYZ Corp

tblAddresses ADDRESS_ID: 1 customer_id: 1

ADDRESS_ID: 2 customer_id: 1

ADDRESS_ID: 3 customer_id: 1

Je souhaite, avec un ID d'adresse, récupérer tous les ID d'adresse s des adresses appartenant au même client. Donc, compte tenu de l'exemple ci-dessus, étant donné l'adresse ID 3, je veux que les numéros 1, 2 et 3 soient retournés.

Je suis sûr que c'est une simple jointure, mais j'ai essayé et essayé de travailler dans ma tête et ne peux pas. Quelqu'un peut-il me faire honte s'il vous plaît?

Répondre

2
SELECT * 
FROM tblAddresses 
WHERE customer_id = (SELECT customer_id FROM tblAddresses WHERE address_id=3) 

Ceci utilise une sous-requête pour obtenir le customer_id de la ligne correcte et l'utilise dans la clause where. MySQL Docs on subqueries

une jointure (un peu plus compliqué, mais comme vous spécifiquement demandé):

SELECT t1.* 
FROM tblAddresses AS t1 
INNER JOIN (SELECT customer_id FROM tblAddress WHERE address_id=3) AS t2 
ON t1.customer_id = t2.customer_id 
+0

Oh oui, cela est temps sexy, merci: D – jwbensley

3

JOIN sont l'outil pour le travail. D'une manière générale, les sous-requêtes ne devraient être utilisées que pour faire des choses qui ne peuvent pas être faites avec JOINs.

Cela devrait être la meilleure façon d'obtenir ce que vous voulez (assurez-vous qu'il ya un index sur tblAddresses.customer_id):

SELECT t2.id 
FROM tblAddresses AS t1 
JOIN tblAddresses AS t2 ON t2.customer_id = t1.customer_id 
WHERE t1.address_id = 3 
+0

Merci pour votre répondre, bien que subqueris correcte était quelque chose de nouveau pour moi et m'a aidé avec la prochaine section de mon projet sinon cela aurait signifié une autre question alors merci aussi: D – jwbensley