2012-07-09 3 views
1

두 개의 MySQL 쿼리가 있습니다.일치하지 않는 항목을 표시하는 mysql 쿼리

첫번째는 사람이 어떤 훈련을했는지 보여줍니다. 두 번째는 직업에 필요한 훈련을 보여줍니다.

먼저 쿼리

select training from coursescompleted where person='$person' 

번째 질의

일례로서
select j.job, r.training from riskstraining r join jobsrisks j on j.risk=r.Risk 

, 제 쿼리 (훈련 완료)의 출력은 :

first aid course 
Firesystems course 

및 의 출력 두 번째 쿼리 (필요한 교육)는 다음과 같습니다.

Security Guard - Firesystems Course 
Crane Operator - Driving LicenseCourse 
Crane Operator - first aid course 

이러한 쿼리를 결합하여 작업을 수행하는 데 필요한 코스를 어떻게 표시합니까? 아래의 예와 같이 '크레인 운전자'라는 직업을 선택한 경우 '응급 처치 과정'을 이미 마친 상태이므로 '운전 면허 코스'가되어야합니다. 조인은 일치하는 위치가 아닌 일치하는 위치에 결과를 표시합니다.

원하는 출력 - '크레인 운영자가'

crane operator - driving license course 

쿼리가 될해야하는지에 대한 조언이나지도

을 선택?

답변

2
select j.job, r.training from riskstraining r join jobsrisks j on j.risk=r.Risk 
where r.training not in 
(select training from coursescompleted where person='$person') 

뭔가를 시뮬레이션을 확인할 수 있습니다.

+0

감사합니다. 100 % 작동합니다. 시간 내 주셔서 감사합니다. – Smudger

+0

반갑습니다. 당신 덕분에 다른 해결책을 배웠습니다 :) – zato

1

다음은 트릭을 할 것입니다 :

select j.job, r.training 
from riskstraining r join jobsrisks j on j.risk=r.Risk 
left join 
(select training from coursescompleted where person='$person') cc 
on r.training = cc.training 
WHERE cc.training IS NULL 

당신은 코드에 대한 제 생각 엔 그런 here

+0

감사합니다. 업데이트 된 코드도 100 % 작동합니다. 당신의 답이 또한 작동하는 @zato와 비교된다면 어떤 솔루션이 더 선호 할 수 있습니까? – Smudger

+0

@ 스 머저 오신 것을 환영합니다! Zato의 대답은 내 것이나 마찬가지입니다. – alfasin

+0

건배 @alfasin. 다시 한번 감사드립니다. – Smudger

관련 문제