2010-05-18 2 views
1

나는 쿼리에서 단순한 조인을 사용하지만 두 테이블 모두에 조건이 있어야합니다. "확인 = '예'"그러나 테이블 중 하나에도 아무 것도 없다면 쿼리와 일치하는 행은 아무런 결과도 반환하지 않습니다.MySQL 및 조인의 각 테이블에 대한 대체

데이터베이스 :

.----------parties----------. 
| id - party_id - confirmed | 
|---------------------------| 
| 1  1   yes | 
| 1  2   no  | 
| 1  3   no  | 
+---------------------------+ 

.-----------events----------. 
| id - event_id - confirmed | 
|---------------------------| 
| 1  1   no  | 
+---------------------------+ 

또는

.----------parties----------. 
| id - party_id - confirmed | 
|---------------------------| 
| 1  1   no  | 
| 1  2   no  | 
| 1  3   no  | 
+---------------------------+ 

.-----------events----------. 
| id - event_id - confirmed | 
|---------------------------| 
| 1  1   yes | 
+---------------------------+ 

검색어 :

SELECT p.party_id, e.event_id 
FROM parties p 
LEFT JOIN events e 
ON p.id=e.id 
WHERE p.id = '1' 
AND p.party_id IN (1,2,3) 
AND e.event_id IN (1) 
AND p.confirmed='yes' 
AND e.confirmed='yes' 

그것은 아무 것도 반환하지 않습니다하지만 난 그게 빈 EVENT_ID 또는 EVENT_ID와 빈과 party_id 1을 반환하려면 party_id. 나는 이것이 의미가 있기를 바랍니다. 그리고 나는 아무것도 놓치지 않았습니다, 당신의 도움에 감사드립니다!

편집 추가 역 데이터베이스 코드 나는 EVENT_ID 및

답변

2

귀하의 WHERE 조건이 LEFT JOIN에 의해 생성 된 모든 NULLs을 필터링하는 빈 party_id를 반환해야합니다.

이동합니다 ON 절에 events을 포함 모든 조건 : 대답에 대한

SELECT p.party_id, e.event_id 
FROM parties p 
LEFT JOIN 
     events e 
ON  e.id = p.id 
     AND e.event_id IN (1) 
     AND e.confirmed = 'yes' 
WHERE p.id = '1' 
     AND p.party_id IN (1, 2, 3) 
     AND p.confirmed = 'yes' 
UNION ALL 
SELECT p.party_id, e.event_id 
FROM events e 
LEFT JOIN 
     parties p 
ON  p.id = e.id 
     AND p.party_id IN (1, 2, 3) 
     AND p.confirmed = 'yes' 
WHERE e.event_id IN (1) 
     AND e.confirmed = 'yes' 
     AND p.id IS NULL 
+0

덕분에, 그것은 작동하지만 거기가 반대로 작동하도록하는 방법? I.E. 모든 당사자의 확인 = 아니오 및 이벤트 확인 = 예 – Scott

+0

@Scott : 샘플 데이터 세트 및 원하는 출력으로 질문을 업데이트하십시오. – Quassnoi

+0

질문에 답변을 추가했습니다. 도움에 감사드립니다. – Scott

관련 문제