2017-03-20 11 views
0

I持っているすべての言語が含まれている3つのテーブル(ユーザーID、言語が含まれ、レベル) enter image description here 1-第一の個人情報 2-第2接合テーブル 3-第三言語取得クエリと

各人缶いくつかの言語を話す。たとえば、英語とフランス語を話すことができる人を示すクエリを入手するにはどうすればよいですか? 問題は1人が1つのセルにdoesntストアを話すことができるすべての言語です データシートビューで3番目のテーブル(言語)を開いた場合、別のレコード(行) に保存されています。私は誰がそれを話すのか見ることができる各言語。 私は条件部の "英語"または "フランス語"の質問 - >を取得したい場合 私はすべての人々を見ることができますが、私は変更した場合と結果が何もない場合は? フランス語と英語を話すことができる人のための質問を得ることは可能ですか?

答えて

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

こんにちは、それは正しく、 私はあなたが言ったことを試してみましたが、それはspaek英語またはフランス語できるpepleを示しています。 これは、一人の人間が両方の言語を話すことを意味し、実行を押すと、この人の名前が英語で2回、フランス語で1回のレコードが表示されます。 (英語とフランス語)を話せない人(英語とフランス語)を表示する質問を取得したい – Mitra

+0

私は2番目の質問を返すように更新しました何を求めているのですか? –

関連する問題