- - PR -
複数の条件を満たすSQL文
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-02 04:55
はじめましてIerと申します。
現在、MySQL4.0で以下のようなテーブルを作成しているのですが、 [Report] rID | rName ------------ 1 | name1 2 | name2 [Category] cID | cName ------------ 1 | cat1 2 | cat2 [reportCategory] rID | cID ---------- 1 | 1 1 | 2 2 | 1 [結合SQL] SELECT * FROM Report AS r INNER JOIN ReportCategory AS rc ON r.rID = rc.rID INNER JOIN Category AS c ON rc.cID = c.cID; この状態から、cat1とcat2を含むReportを抽出したいと思っているのですが、 上手くいくSQL文が組めないでいます。 この場合はプログラムの方で対処する他ないのでしょうか? |
|
投稿日時: 2007-10-02 09:04
どういうことがしたいのかが把握出来ないのですが(私の読解力不足でしょうけど・・)こんな感じですかねぇ。
SELECT Report.*, Category.* FROM (ReportCategory INNER JOIN Category ON ReportCategory.cID = Category.cID) INNER JOIN Report ON ReportCategory.rID = Report.rID; 「こういう結果セットを得たい」というのを書いていただけるといいのですが・・。 ∴ 外していたらごめんなさい。 |
|
投稿日時: 2007-10-02 10:53
shimixさん、返答ありがとうございます。
結合SQLを発行すると概ね rID | rName | cID | cName -------------------------- 1 | name1 | 1 | cat1 1 | name1 | 2 | cat2 2 | name2 | 1 | cat1 という結果が得られると思うのですが、 ここから、cNameにcat1とcat2を持つrIDを抽出したいと思っています。 [欲しい結果] rID | rName ------------ 1 | name1 説明不足ですみませんでしたm(_ _)m |
|
投稿日時: 2007-10-02 11:28
あぁ、なるほど・・。未検証ですが、こんな感じですか?
select ReportCategory.rID, Report.rName from (ReportCategory inner join Report on ReportCategory.rID = Report.rID) inner join Category ON ReportCategory.cID = Category.cID group by ReportCategory.rID, Report.rName having (Sum(case cName when 'cat1' then 1 else 0)<>0) AND (Sum(case cName when 'cat2' then 1 else 0)<>0); #手元のMS-Accessでテストしただけなので、相当に怪しいかも・・ [ メッセージ編集済み 編集者: shimix 編集日時 2007-10-02 11:32 ] |
|
投稿日時: 2007-10-02 12:36
shimixさん、返答ありがとうございます。
MySQLでも期待通りの結果が返ってくることを確認しました。 本当に助かりました。ありがとうございましたm(_ _)m |
1