• 締切済み

1つの列から複数の候補を選ぶ

こんばんは。いつもお世話になっております。 今回、ひとつの列から5つの候補を抜き出すというものに挑戦しようと思いました。 moziとid列がある moziテーブルと idとcolor列がある colorテーブルの二つがあります。 id mozi  --------- 1 A 1 B 2 A 2 B 2 C 3 A 1 C 1 D 1 E id color --------- 1 緑 2 赤 3 白 というように入っており、 id列で結合しております。 今回、id列で結合後、mozi列にAとBを含む(AND) 場合、colorテーブルのidとcolor列を抽出するということを行いたいのです。 この場合ですと、1と2、緑と赤を抽出したいのです。 select c.id,c.color from color c, mozi m where c.id=m.id and mozi="A" and mozi="B" というsql文しか思い浮かばないのです。 当然mozi列が2列ないためこのsql文は使えないということがわかるのですがどうすれば求めるものがだせるのかわからないのです。 どなたかお分かりの方がいらっしゃいましたらご教授のほうよろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

きんと検証はしてませんが、こんな感じでどうでしょう? SELECT mozi.id,color FROM mozi INNER JOIN COLOR USING(id) WHERE mozi in ('A','B') GROUP BY mozi.id HAVING COUNT(*)=2

ShiftTail
質問者

補足

うまくいきませんでした。 もうちょっと参考にして私なりに変えてみます。 意見ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

MySQLのバージョンによってやり方がことなります。 補足が必要です

ShiftTail
質問者

補足

>MySQLのバージョンによってやり方がことなります。 補足が必要です 大変失礼しました。 5.0.43になります。

回答No.1

select c.* from color c where exists (select * from mozi m where m.id=c.id and m.mozi="A") AND exists (select * from mozi m where m.id=c.id and m.mozi="B") こんな感じですかね~ もう少し整理できるかもしれませんが.. (実際に試してないので、違っていたら、ごめんなさい)

ShiftTail
質問者

補足

んー。どうもうまくいきませんでした。 意見ありがとうございました。

関連するQ&A