日本語でどう説明すればもわからないのでタイトルも意味不明ですが
以下のテーブルからプリウスとアクアだけを取り出したいのです。
○自動車テーブル○
車名(PK), 連番(PK), 装備, 数量
---------------------------------
プリウス, 1, エアコン, 2
プリウス, 2, ブレーキ, 1
アクア , 1, ブレーキ, 1
アクア , 2, エアコン, 2
レクサス, 1, テレビ, 3
レクサス, 2, ビデオ, 2
ノア , 1, ブレーキ, 1
ノア , 2, テレビ, 1
○取得したい結果○
車名
--------
プリウス
アクア
エアコン2個、且つブレーキ1個が装備されている車名を取得したいのです。
ブレーキ1個が装備されているだけのノアはエアコン2個という条件が満たされていないので取得したくありません。
そもそもこのようなことが可能なのかもわからないのですがjava側で処理をするには件数があまりに膨大なので行き詰まっています。
明日、職場からチェックさせていただきます。
お礼は夜になってしまいますが何卒よろしくお願いします。
No.2ベストアンサー
- 回答日時:
まず、条件をなるべく素直に書くと↓のようなSQLになりました。
SELECT DISTINCT 車名 FROM 自動車 a
WHERE
EXISTS (
SELECT * FROM 自動車 b
WHERE a.車名 = b.車名 AND 装備 = 'エアコン' AND 数量 = 2
) AND EXISTS (
SELECT * FROM 自動車 c
WHERE a.車名 = c.車名 AND 装備 = 'ブレーキ' AND 数量 = 1
)
;
WHERE句でサブクエリーを使って、条件にマッチする行の存在をチェックしています。
これでは、ちょっと冗長な感じがするのでGROUP BYとHAVINGを使って書き直すと下記の様になりました。
SELECT 車名 FROM 自動車
GROUP BY 車名
HAVING
SUM(CASE WHEN 装備 = 'エアコン' AND 数量 = 2 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN 装備 = 'ブレーキ' AND 数量 = 1 THEN 1 ELSE 0 END) > 0
;
HAVING句内で集約関数とCASE式を組み合わせる事によって、1番目のSQLと同様の存在チェックを行っています。
蛇足ですが、車種も装備も同一の行が複数有ると思えませんので、連番の行は冗長かと思います。
下記の様に車名と装備の組が主キーとなっても良さそうに見えます。
車名(PK), 装備(PK), 数量
参考URL:http://codezine.jp/article/detail/652
詳しくご説明していただきありがとうございます。
このような方法は全く想像できませんでした。
無事に今日一日を終えることができました。
大変助かりましたm(__)m
No.1
- 回答日時:
select name from (select name as name from hoge where soubi='エアコン
suu=2 union all select name as name FROM hoge where soubi='ブレーキ' and suu=1) group by name having count(*)=2すぐにご回答いただきましてありがとうございます。
そして私にはとてもわかりやすく、正直感動してしまいました。
処理が重いのかどうかはわからないのですが、
設計者の私自信が一番わかりやすいと感じたのでこのSQLを使わせていただきました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 国産車 どちらも現行型のHVでアクアかヤリス、4日で往復800km以上走る場合はどちらにしますか? 3 2022/07/06 21:50
- カスタマイズ(車) 最も安全な車はなんですか? 例としては…車体の頑丈さ、クッション性、当たり強さ、信頼性、オフロードオ 11 2023/07/06 10:57
- 国産車 60歳前後の自家用車の考えについて・・・ 19 2022/11/02 13:23
- その他(保険) 自動車保険について質問です。 納車に伴い新しく保険加入(ネット)するのですが、自動ブレーキがついてる 1 2022/05/22 19:13
- 物理学 時速 54 km で一直線上を車で走っていると、25 m 先に障害物を見つけた。このとき、どのくら 1 2022/06/05 20:05
- 事故 一時停止不履行の車と衝突しそうになり急ブレーキをかけて減ったタイヤの損害賠償を求められますか? 9 2023/03/02 08:40
- 中古車 今軽自動車を探していて(なんとなくワゴンRN-BOXに絞りました)自動ブレーキやアクセルブレーキ踏み 7 2022/10/16 12:19
- 運転免許・教習所 教習車でプリウスを使用しているのですが、これで合ってますか?? 次の技能教習までに完璧に覚えているよ 2 2023/06/04 17:41
- 物理学 時速 54 km で一直線上を車で走っていると、25 m 先に障害物を見つけた。このとき、どのくら 7 2022/05/29 12:09
- 国産車 日本のストップ&ゴーが頻繁な道路状況に於いて市街地限定とした場合1番ベストな自動車は? フィットハイ 5 2022/08/09 06:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レノボ1962 errer パソコンが起...
-
ナビ画面が勝手にスクロールす...
-
自動車メーカを”OEM”と呼ぶ理由
-
C26セレナの塗装が剥がれ。ディ...
-
EXCEL VBAで、セルの文字列の...
-
トヨタのライズって男が乗って...
-
なぜ、ホンダ車タイヤのナット...
-
レクサス車の G-LINK LCMPⅡ 契...
-
トヨタファイナンスの審査基準...
-
道路幅3m車庫幅2.8m にエ...
-
カーナビで、謎の鐘の音が鳴る...
-
??ドアスピーカーのカプラー...
-
トヨタ純正カーナビのタッチパ...
-
韓国仁川国際空港から仁寺洞ク...
-
昭和23年の5万円は、現在の価値...
-
新型クラウンが走ってましたが...
-
DropDownListの初期値の設定(C#)
-
210クラウンアスリートHVバッテ...
-
フィットハイブリッドから10...
-
HONDAの純正部品が手に入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レノボ1962 errer パソコンが起...
-
自動車メーカを”OEM”と呼ぶ理由
-
昭和23年の5万円は、現在の価値...
-
トヨタのライズって男が乗って...
-
なぜ、ホンダ車タイヤのナット...
-
EXCEL VBAで、セルの文字列の...
-
??ドアスピーカーのカプラー...
-
現行アクアって0-100 8.26sと ...
-
レクサス車の G-LINK LCMPⅡ 契...
-
トヨタファイナンスの審査基準...
-
210クラウンアスリートHVバッテ...
-
プリウス30系、ステアリング...
-
C26セレナの塗装が剥がれ。ディ...
-
明日、仮免技能試験を受けます...
-
トヨタ純正カーナビのタッチパ...
-
跳ねているシーバスは釣れない...
-
住宅展示場
-
カーナビで、謎の鐘の音が鳴る...
-
【五十鈴】ってなんですか? 50...
-
道路幅3m車庫幅2.8m にエ...
おすすめ情報