2011-08-08 5 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를 검색합니다. 동일한 고객에 속하는 주소의 주어진 주소 ID 3 위의 예를 들어, 1, 2 및 3 숫자를 반환합니다.

나는 이것이 단순한 결합이라고 확신하지만 나는 내 머리 속에서 그것을 해결하려고 노력했지만 시도 할 수 없었다. 누군가 나를 수치스럽게 만들 수 있습니까?

답변

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

이렇게하면 하위 쿼리를 사용하여 올바른 행의 customer_id를 가져 와서 where 절에서 사용합니다. JOIN를 (조금 더 복잡하지만, 특별히 요구로)와 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

, 당신이 섹시 시간 감사합니다 아, 네,이된다을 :

이것은 당신이 (tblAddresses.customer_id에 인덱스가 있는지 확인) 원하는 것을 얻을 수있는 최적의 방법이어야한다 D에 대한 – jwbensley

3

조인은 작업을위한 도구입니다. 일반적으로 하위 쿼리는 JOIN으로 수행 할 수없는 작업을 수행하는 데에만 사용해야합니다.

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

주셔서 감사합니다 대답은 올바른 하위 쿼리가 내게 새로운 것이지만 내 프로젝트의 다음 섹션에서 도움이되었다. 그렇지 않으면 또 다른 질문을 의미했을 것이다. D : D – jwbensley