2011-08-13 5 views
1

특정 SQL 쿼리와 관련하여 약간의 문제가 있습니다. 두 테이블의 데이터를 조인해야하며 세 번째 테이블을 사용하여 데이터를 제한해야합니다.여러 테이블에서 데이터를 얻기 위해 여러 테이블의 조건을 사용해야합니다.

MEMBERS(member_id,first_name,last_name) 
    MEMBERS_GROUPS(member_id,group_id) 
    CHARGES(charge_id,member_id,charge_amount,status) 

나는 특정 그룹의 모든 구성원에 대한 모든 혐의를 찾을 필요하지만, 나는 또한 MEMBERS 테이블에서 이름과 성을 잡아하려면 다음과 같이 테이블이 있습니다. 나는 또한 시도했다

select c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1 

: 내가 지금까지 함께 왔어요 쿼리는

SELECT c.*, m.first_name, m.last_name 
FROM charges c, members_groups mg, member m 
WHERE c.member_id=mg.member_id 
    AND mg.group_id = 1 
    AND c.status='Valid' 
    AND c.member_id = m.member_id 

...하지만 어느 반환 데이터 나는이 필요합니다. 나는이 것을 지나치다 고 확신하지만, 나는 올바른 삶의 가치를 얻을 수 없다. Cartesian 제품 인 것처럼 보입니다. 관계없이 너무 많은 행과 잘못된 데이터를 반환합니다.

답변

0

아마도 당신이 필요 또한 INNER는 mg.member_id = m.member_idmembers_groups 에 해당 행에 가입 제한하는 것입니다 :

SELECT c.*, m.first_name, m.last_name 
FROM charges c 
LEFT JOIN member m 
    ON c.member_id=m.member_id 
INNER JOIN members_groups mg 
    ON mg.group_id=1 
    AND mg.member_id = m.member_id 
+0

*은 이마 난다 * 완전 바보. 메소드에 추가로 더 많이 추가 되었기 때문에 원래 쿼리가 작동하지 않았습니다. 간단히 말해, 확장 된 "AND"쿼리는 방금 게시 한 쿼리 외에도 작동합니다. 고마워. –

관련 문제