2009-12-09 4 views
1

14 개의 레코드가있는 스킬 테이블이 있습니다. 다음과 같이 구성되어 있습니다. | id | name |MySQL 가입에 대한 도움말

다음으로 기술 테이블에 가입하려는 User_Skills 테이블이 있습니다. | User_id | Skill_id |

는 기본적으로 나는 항상 (14 개) 기록 결과 사용자가과 관련되지 않은 분야에서 NULL 보여주는 가입 할 수 있도록하려면 : 여기가 구조입니다.

SELECT * FROM Skills LEFT JOIN User_Skills ON Skills.id = User_Skills.Skill_id 

편집 : -는이 쿼리 결과의 집합입니다 그것을 명확하게하기 위해

은 거의 내가이 쿼리 코드로 원하는 결과를 얻었다. User_id에 의해 스킬을 선택해야하지만 결과가 User_id 필드에 Null 인 경우에도 14 가지 스킬 모두를 표시해야합니다.

id name User_id  Skill_id 
1 HGV1 1000 1 
1 HGV1 1001 1 
2 HGV2 1001 2 
3 No.1 Mechanic 1000 3 
3 No.1 Mechanic 1001 3 
4 No.2 Mechanic 1001 4 
5 Designer 1001 5 
5 Designer 1000 5 
6 Engineer 1000 6 
7 Data Analysis 1001 7 
7 Data Analysis 1000 7 
8 Coaching/Inst. 1001 8 
8 Coaching/Inst. 1000 8 
9 Hospitality  1000 9 
10 Promo Girl 1000 10 
11 Public Relations NULL NULL 
12 Photographer NULL NULL 
13 Film Crew 1001 13 
14 Physiotherapist  NULL NULL 

만 명 이상의 사용자가 기술로 연결되어 있기 때문에 기술 이름을 중복, 즉 내가 user_skills 테이블에있는 기록 ...의 양을 표시합니다. 코드 :

이도 거의를 가져

SELECT * FROM Skills LEFT JOIN User_Skills ON Skills.id = User_Skills.Skill_id WHERE User_id = 1001 

그러나 이것은 단지 사용자와 관련된 기술을 보여주고 내가 원하는 원하는 NULL 항목이 표시되지 않습니다.

누구든지이 쿼리를 어떻게 달성 할 수 있는지 알고 있습니까?

답변

1
SELECT * FROM 
Skills LEFT OUTER JOIN 
(select distinct user_id, skill_id from User_Skills where user_id = 1001) xxx 
    ON Skills.id = xxx.Skill_id 

당신이 필요한 것을 만들어 내는가?

+0

환상적입니다 - 매력처럼 작동합니다! 나는 너무 가깝다. 나는 AND 대신에 어디를 사용했다. 나는 LEFT와 OUTER와 조인을 보지 못했습니다. 질의에서 OUTER을 제거하면 같은 결과가 나타납니다. 대단히 고마워 .. 다시 사업에 빠지게! – Samuurai