2017-03-20 5 views
0

I가 모든 언어를 포함 세 개의 테이블 (사용자 ID, 언어를 포함 레벨) enter image description here 1- 제 개인 정보 2- 초 접합 테이블 -3- 번째 언어지고 쿼리 및

각자 수 여러 언어를 구사합니다. 예를 들어 영어와 프랑스어로 말할 수있는 사람들을 보여주는 쿼리를 어떻게 얻을 수 있습니까? 문제는 한 사람이 말할 수있는 모든 언어입니다. 데이터 시트보기에서 세 번째 테이블 (언어)을 열면 다른 레코드 (줄) 에 저장됩니다. 여기에 100 개의 언어가 있습니다. 각 언어는 내가 말하는 사람을 볼 수 있습니다. 기준 부분 "영어"또는 "프랑스어"에서 쿼리 ->를 가져 오려면 모든 사람들을 볼 수 있지만 변경하거나 결과가 아무것도 아닌 경우? 프랑스어와 영어를 구사할 수있는 사람들을 검색 할 수 있습니까?

답변

0

는 다행스럽게도 필자는 당신의 테이블 구조에 대한 이해를 가지고 :

테이블 : 사람들

  • person_id로 : 일련 번호기본 키
  • 으로 PersonName : 텍스트

테이블 : 언어

  • LANGUAGE_ID : 일련 번호기본 키
  • 언어 : 텍스트

테이블 : Person_Languag e_Link

  • person_id로 : 기본 키. 외래 키 참조 사람들
  • LANGUAGE_ID : 기본 키.외래 키 참조 언어
  • Language_Level :
    enter image description here

    편집 : AF 쿼리는 다음과 같이 보일 것 그래픽으로

SELECT PersonName , Language , Language_Level FROM (People T1 LEFT JOIN Person_Language_Link T2 ON T1.Person_ID = T2.Person_ID) LEFT JOIN Languages T3 ON T2.Language_ID = T3.Language_ID WHERE Language IN ('French', 'English')

SELECT  T2.PersonName 
      , T4.Language 
      , T3.Language_Level 
FROM  (((
       SELECT  Person_ID 
          , Count(Person_ID) AS CountOfPerson_ID 
       FROM  Person_Language_Link LEFT JOIN Languages ON Person_Language_Link.Language_ID = Languages.Language_ID 
       WHERE  Languages.Language In ('French','English') 
       GROUP BY Person_ID 
       HAVING  Count(Person_ID)=2 
      ) T1 INNER JOIN People T2 ON T1.Person_ID = T2.Person_ID) 
       INNER JOIN Person_Language_Link T3 ON T1.Person_ID = T3.Person_ID) 
       INNER JOIN Languages T4 ON T3.Language_ID = T4.Language_ID 
WHERE  T4.Language IN ('French','English') 

내부 SELECT 쿼리가 두 언어를 알고있는 사람들의 person_id로,의 나머지를 반환 TER 몇 가지 내가 SQL을 작성하는 더 나은 방법이 느낄 수 있지만,이, 영어와 불어를 아는 사람들을 반환 생각 그런 다음 쿼리는 해당 ID의 사람 이름, 언어 및 수준을 가져옵니다.

프랑스 & 영어를 사용하는 사람들이 말하는 다른 언어를 보려면 WHERE 최종본을 제거하십시오.

+0

안녕하세요, 맞습니다. 나는 당신이 말한 것을 시도했지만, 영어 나 불어를 사용할 수있는 peple을 보여줍니다. 이것은 한 사람이 두 언어를 모두 말하는 것을 의미하며 실행을 누르면 영어로 2 번, 프랑스어로 1 번 기록됩니다. 또한 영어만을 사용하는 사람을 보여 주며 프랑스 사람은 프랑스어를 할 수 없습니다. 두 언어 (영어 및 프랑스어)를 사용할 수없는 사람 (영어 또는 프랑스어)이 아닌 사람을 나타내는 쿼리를 가져 오려고합니다. – Mitra

+0

두 번째 쿼리를 반환하도록 업데이트했습니다. 네가 무엇을 요구하는지. –