2012-02-02 3 views
1

나는 두 테이블, 메모mysql 같은 테이블에 두 번째 내부 조인을 사용하여 내부 조인을 수행하는 방법은 무엇입니까?

직원
id, note, client#, flag, employee#, date 

다른 하나가

id, employee# 

나는 "N"플래그가있는 모든 노트를 찾으려하지만, "Y를하지 마십시오 "플래그는 동일한 날짜 및 클라이언트 #에 대해 플래그하지만 employee 테이블에있는 직원에 대해서만 플래그를 지정합니다.

1 mynote 123 Y abc 1/1/2011 
2 mynote 123 N abc 1/1/2011 
3 mynote 124 N abc 1/1/2011 
4 mynote 124 N ccc 1/1/2011 

(내 직원 테이블에 내가 가진 직원 ABC) 그래서 시작

: 작동

SELECT * from notes a inner join employees b on a.employee = b.employee WHERE a.flag = 'N' 

, 내가 무엇을 얻을 보이는

예를 들어 I로 시작 현재 직원 테이블에있는 직원들만의 공감할만한 메모 목록과 같습니다 (예 : 위의 abc - 2 및 3 기록).

이제 "N"레코드이고 동일한 날짜와 클라이언트 #에 일치하는 "Y"레코드가 없으므로 레코드 3 만 가져와야합니다.

나는 단지 추가 할 부분을 추가하는 것으로 생각합니다.

감사합니다.

+0

WHERE 절에서'flag' 조건을 제거하지 않는 이유는 무엇입니까? 네가 원하는 걸 줄지 않을거야? –

+0

나는 그것을 조금 명확하게했고 아래의 쿼리를 시도했지만 작동하지 않았기 때문에 이전의 설명이 명확하지 않다고 생각한다. –

답변

1

노조를 사용해보십시오. 이렇게하면 두 가지 다른 쿼리로 작업 할 수 있습니다. 당신이 ON 절에 flag = 표현을 이동하면

0

, 그것은 더 간단하게 :

SELECT * from employees e 
inner join notes n1 
on n1.employee = e.employee 
    AND n1.flag = 'N' 
inner join notes n2 
ON n2.employee = e.employee 
    AND n2.client = n1.client AND n2.date = n1.date AND n2.flag = 'Y' 

가 나는 또한 dasblinkenlight에서 개선 별명을 빌렸다.

관련 문제