2011-08-08 59 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