- ベストアンサー
SQLのSELECTを使用してデータを抽出する方法
- SQLのSELECT文を使用して指定した条件に合致するデータを抽出する方法について解説します。
- 抽出条件はaaa, ccc, ddd, eee, gggが重複し、bbbが異なり、かつhhhが小さいものです。
- 具体的な抽出結果を示し、条件に合致するデータの抽出例を示します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3 に私が書いた条件は合っていたのでしょうか? 合っていたとして・・・。 > 上記のSQLで可能でしょうか? 可能ではないですね。 ただし別の方法を使ったSQLでは可能です。かなり冗長ですが。 ---------------------------------------- SELECT * FROM tbl a WHERE EXISTS (SELECT * FROM tbl b WHERE (a.aaa = b.aaa OR a.ccc = b.ccc OR a.ddd = b.ddd OR a.eee = b.eee OR a.ggg = b.ggg) AND a.bbb <> b.bbb) AND NOT EXISTS (SELECT * FROM tbl b WHERE a.aaa = b.aaa AND a.bbb = b.bbb AND a.ccc = b.ccc AND a.ddd = b.ddd AND a.eee = b.eee AND a.ggg = b.ggg AND a.hhh > b.hhh) ORDER BY aaa, bbb, ccc, ddd, eee, ggg ---------------------------------------- NOT EXIST句は aaa,bbb,ccc,ddd,eee,ggg が同じで hhh が小さい行が存在しない、つまり hhh が最小の行という条件を表しています。 また、window関数を使っても同じ事が出来そうです。 蛇足ですが、なかなか回答が付かないからといってマルチポストするのはやめましょう。
その他の回答 (3)
- root139
- ベストアンサー率60% (488/809)
補足ありがとうございます。 おそらく下記のような条件になると思われますがどうでしょうか? 1. テーブルの中に aaa,ccc,ddd,eee,ggg のどれかの値が等しくbbbの値が異なる行が存在する。 2. aaa,bbb,ccc,ddd,eee,ggg が同じ行が有る場合は hhh が最小のものを抽出する。 もし、これでよろしければ、下記の様なSQLになると思います。 ---------------------------------------- SELECT aaa, bbb, ccc, ddd, eee, ggg, MIN(hhh) FROM tbl a WHERE EXISTS (SELECT * FROM tbl b WHERE (a.aaa = b.aaa OR a.ccc = b.ccc OR a.ddd = b.ddd OR a.eee = b.eee OR a.ggg = b.ggg) AND a.bbb <> b.bbb) GROUP BY aaa, bbb, ccc, ddd, eee, ggg ORDER BY aaa, bbb, ccc, ddd, eee, ggg ----------------------------------------
- root139
- ベストアンサー率60% (488/809)
提示されている条件に不明な点が有りますので確認です。 > ・aaa,ccc,ddd,eee,gggが重複、 「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか? > ・hhhが小さいもの 何と比べて小さいのでしょうか? aaa,ccc,ddd,eee,ggg と比べてでしょうか? それとも他の全てのカラムと比べるのでしょうか? あるいは決まった数と比べてでしょうか? > ・bbbが異なるもの 何と異なるのでしょうか? aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか? それとも他の全てのカラムの値と異なるのでしょうか?
補足
回答ありがとうございます。 質問が適切ではなかったので以下のご質問にコメントいたします。 > > ・aaa,ccc,ddd,eee,gggが重複、 >「aaa,ccc,ddd,eee,ggg が全て同じ値」という事で良いでしょうか? 御認識の通りです。 > > ・hhhが小さいもの > 何と比べて小さいのでしょうか? > aaa,ccc,ddd,eee,ggg と比べてでしょうか? > それとも他の全てのカラムと比べるのでしょうか? > あるいは決まった数と比べてでしょうか? 「aaa,ccc,ddd,eee,ggg が全て同じ値」のものに対して一番小さい値となります。 114 114 114 114 114 114 111 ・・・A 114 114 114 114 114 114 112 ・・・B 114 115 115 114 114 115 111 ・・・C 114 115 115 114 114 115 112 ・・・D でいいますと、AとB、CとDふぁ条件に一致してその中でhhhが小さい AとCを抽出したいということです。 > > ・bbbが異なるもの > 何と異なるのでしょうか? > aaa,ccc,ddd,eee,ggg の値と異なるのでしょうか? > それとも他の全てのカラムの値と異なるのでしょうか? 「aaa」が一致しているものの中でbbbが異なるものを指しています。 よろしくお願いします。
- Tarepanda_club
- ベストアンサー率72% (16/22)
はじめまして。 select * from table1 where aaa=ccc && aaa=ddd && aaa=eee && aaa=ggg && aaa!=bbb && aaa>hhh これで抽出できませんか? テーブル名はtable1としました。
お礼
ご回答ありがとうございます。 質問の内容が適切ではなかったようです。 No.2の方より質問がありましたのですそちら再度質問させていただきます。
補足
早速のご回答ありがとうございます。 (テーブル:AAA) aaa bbb ccc ddd eee ggg hhh iii ------------------------------- 111 111 111 111 111 111 111 ii1 112 112 112 112 112 112 111 ii2 112 113 113 113 113 113 111 ii3 114 114 114 114 114 114 111 ii4 114 114 114 114 114 114 112 ii5 114 115 115 114 114 115 111 ii6 114 115 115 114 114 115 112 ii7 116 116 116 116 116 116 111 ii8 116 116 116 116 116 116 112 ii9 116 116 116 116 116 117 111 ii0 116 116 116 116 116 117 112 ii1 118 118 118 118 118 118 118 ii2 のようにテーブル:AAAにiiiを追加し、 aaa bbb ccc ddd eee ggg hhh iii ------------------------------- 112 112 112 112 112 112 111 ii2 112 113 113 113 113 113 111 ii3 114 114 114 114 114 114 111 ii4 114 115 115 114 114 115 111 ii6 を抽出する場合(条件にないiiiも抽出する)も、 上記のSQLで可能でしょうか? よろしくお願いします。