2011-08-19 6 views
0

에서 서로에 대한 여러 행을 확인 나는 다양한 정보가 그들에 관한와 건물의 테이블이 등 address, building_id, 같은MySQL의

나는 또한 문제가 될 수 아무것도 포함 된 보고서의 테이블이

그 건물들. 모든 보고서는 여기에 버려지기 때문에이 표는 방대한 양입니다. 각 보고서의 상태는 0 = 폐쇄 또는 1 = 활성입니다. 참고 : building_id도 각 레코드에 있으므로이 방법으로 함께 묶을 수 있습니다.

마지막 부분은 ID로 로그인 한 사람으로, 사람이 시작하는 건물을 제어합니다.

내가하고 싶은 일은 공개 보고서가있는 건물 목록을 작성하는 것입니다. 지금은 쿼리를 실행하여 모든 건물을 user_id으로 가져 오도록 설정되었습니다. 그런 다음 쿼리를 실행하여 열려있는 모든 보고서를 가져옵니다. ... 스키마의 추가 지식없이

SELECT b.* 
FROM buildings b 
INNER JOIN (SELECT DISTINCT building_id FROM reports WHERE status = 1) r 
ON B.building_id = r.building_id 

답변

0

당신은 INNER JOIN을 할 수있는 :

SELECT * FROM buildings WHERE user_id = $currentUser AND building_id IN 
(SELECT distinct building_id FROM reports WHERE status = 1) 

은 내가 가진 생각의 라인이이었다

+1

INNER JOIN을 (를) 선택하는 것이 좋지만 하위 쿼리를 유지하는 이유는 무엇입니까? 색인을 그렇게 활용할 수 없습니다. – Wiseguy

0

같은 시도 :

SELECT * 
FROM buildings 
WHERE user_id = $currentUser AND (SELECT * FROM reports WHERE building_id = $buildingID and (count reports > 0))