- ベストアンサー
一列から複数条件を使用しての抽出
こんばんは。 今回、4つの条件(4ヶ国語を話せる人)使用し、その条件の言語を話せる人のid(今回は、山田が4つの言語を話せるのでid:1)を抜き出すという作業に挑戦していたのですが、どうにもうまくいかず手が詰まっております。 <実行させようとしたSQL> Select p.id from profile p,language l, Where p.id=l.id And (Skill=”英語” And skill=”スペイン語” And skill=”フランス語” And skill=”オランダ語”); テーブル構造 <親テーブル:profile> Id列 氏名 1 山田 2 岡田 3 斉藤 <子テーブル:language> Id列 使用可能言語 1 オランダ語 1 フランス語 1 英語 1 スペイン語 2 オランダ語 2 英語 3 日本語 3 英語 括弧の前をorに変更すると当然全部のidが抜き出されてしまい、 Andで実行すると、ヒット数は0になってしまいます。 これの対処方法をお分かりの方がいましたらご教授のほうよろしくお願いします。MySQLの使用Verは5.013になります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
in条件とgroup by + having を使う方法が簡単だと思います。 select p.id from profile p,language l where p.id=l.id And skill in('英語','スペイン語','フランス語','オランダ語') group by p.id having count(distinct skill)=4
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
別名を使って言語の回数INNER JOINしてみてはどうでしょう? SELECT p.`id`,p.`name` FROM `profile` as p INNER JOIN `language` as l1 ON p.`id`=l1.`id` AND l1.`skill`='英語' INNER JOIN `language` as l2 ON p.`id`=l2.`id` And l2.`skill`='スペイン語' INNER JOIN `language` as l3 ON p.`id`=l3.`id` And l3.`skill`='フランス語' INNER JOIN `language` as l4 ON p.`id`=l4.`id` And l4.`skill`='オランダ語'
補足
書き込みありがとうございます。 さっそく試したところ、構文エラーとなりうまく行きませんでした。
補足
回答ありがとうございます。 さっそく試してみたところ正常に動きました。 ありがとうございました。