- ベストアンサー
複数の条件
名前 G番号 G連番 数量 チーム AAA 1 1 80 1 AAA 2 1 99 1 AAA 3 1 98 1 AAA 3 2 60 1 AAA 4 1 99 1 AAA 4 2 97 1 BBB 1 1 22 2 BBB 2 1 19 2 BBB 2 2 99 2 BBB 3 1 50 2 CCC 1 1 99 1 CCC 2 1 99 1 DDD 1 1 99 1 DDD 2 1 99 1 DDD 1 1 99 2 DDD 2 1 99 2 以上のようなテーブル T_Aがあるとして、以下のような優先順位での抽出条件を考慮した場合のSQL記述方法が分かりません。教えていただけますでしょうか。 名前 "AAA" OR "DDD" ↓ チーム "1" ↓ G番号 "最大"のもの ↓ G連番 "最大"のもの 欲しいレコード 名前 G番号 G連番 数量 チーム AAA 4 2 97 1 DDD 2 1 99 1 以下のようにやってみましたが駄目でした。 SELECT 名前,G番号,G連番,数量,チーム FROM T_A WHERE 名前='AAA' OR 名前='DDD' AND チーム='1' AND (G番号=(SELECT MAX(G番号) FROM T_A)) AND (G連番=(SELECT MAX(G連番) FROM T_A)) 宜しく御願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
抽出条件を考えて書いたSQLはこうなります。 SELECT 名前,G番号,G連番,数量,チーム FROM T_A WHERE (名前='AAA' OR 名前='DDD') AND チーム='1' AND (G番号=(SELECT MAX(G番号) FROM T_A))AND (G連番=(SELECT MAX(G連番) FROM T_A)) 欲しいレコードから考えて書くとSQLはこうなりました。 SELECT 名前, G番号, G連番, 数量, チーム FROM T_A WHERE チーム='1' AND ((名前='AAA' and G番号=(SELECT MAX(G番号) FROM T_A where 名前='AAA') AND G連番=(SELECT MAX(G連番) FROM T_A where 名前='AAA')) OR (名前='DDD' and G番号=(SELECT MAX(G番号) FROM T_A where 名前='DDD') AND G連番=(SELECT MAX(G連番) FROM T_A where 名前='DDD')));
その他の回答 (1)
名前='AAA' OR 名前='DDD' の部分を (名前='AAA' OR 名前='DDD') にしてもダメですか? 記載のままでは、名前='AAA'の時か、その右側の条件の ものが選択されるのでは?
お礼
ORの扱い方を間違えてました。 ただ、これだと最終的にAAAのG番号とDDDのG番号の比較を行ってしまいAAAの分しか抽出しませんでした。funahoさんから教えていただいたようにAAAとDDDを別々に処理することで解決できました。 有難うございました。
お礼
抽出条件フローの考え方自体間違っていたようですね。 無事、抽出が出来ました。 有難うございました。