2011-08-08 60 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 s屬於同一個客戶的地址。因此,鑑於上面的例子,給定地址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

隨着JOIN(有點複雜,但你專門問):

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

連接是這項工作的工具。一般來說,子查詢只能用於JOINs無法完成的事情。

這應該是最佳的方式得到你想要的(確保有對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

謝謝您答案,雖然正確的subqueris是我的新東西,並幫助我與我的項目的下一部分,否則這將意味着另一個問題,所以也謝謝你:D – jwbensley