2011-08-08 15 views
1

スキーマ:tblCusotmersは顧客を格納し、tblAddressesはそのアドレスを格納し、各顧客は多数のアドレスを持ちます。MySQL初心者参加クエリ

tblCustomers CUSTOMER_ID:1 名:XYZ社

tblAddresses ADDRESS_ID:1 CUSTOMER_ID:1

ADDRESS_ID:2 CUSTOMER_ID:1

ADDRESS_ID:3 CUSTOMER_ID:1

私は、アドレスIDが与えられると、すべてのアドレスID同じ顧客に属する住所のうちの1つである。上記の例では、アドレスIDが3の場合、1,2,3の数字が返されます。

私はこれが単純な参加だと確信していますが、私は頭を尽くして試してみることができました。誰かが私を恥にしてもらえますか?

答えて

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

これは、サブクエリを使用して正しい行のcustomer_idを取得し、それをwhere句で使用します。登録しよう(もう少し複雑にしていますが、具体的に尋ねたとして)でMySQL Docs on subqueries

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

ああ、これはセクシーな時間であり、あなたに感謝:あなたのためのD – jwbensley

3

なJOINは仕事のためのツールです。一般的に言えば、サブクエリはJOINで実行できない処理を行う場合にのみ使用してください。

これは(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

感謝を答えは正しいですが、正しいサブクエリは私には新しいものでしたが、私のプロジェクトの次のセクションで私を助けました。そうでなければ、別の質問をしていたでしょう。 – jwbensley