プロが教えるわが家の防犯対策術!

SQLite3.7.5を使っています。
以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。

<抽出前>
col1 | col2 | col3
1 | true | 3
2 | true | 0
3 |false | 3
4 |false | 5
5 |false | 3

<抽出後>
col1 | col2 | col3
3 |false | 3
5 |false | 3

自分で考えたSQL文は以下です。
抽出結果は問題ないのですが、同じSELECT文を2回書いていてだいぶ効率悪いことをしているのではないかと思い質問しました。
よろしくお願い致します。

SELECT * FROM (SELECT * FROM test WHERE (col2 = false)) WHERE col3 = (SELECT min(col3) FROM (SELECT * FROM test WHERE (col2 = false)))

A 回答 (2件)

SELECT *


FROM test
WHERE col2 = false
AND col3 = (select min(col3) from test where col2 = false)

でどうでしょう?
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

理想の結果が得られました!
スマートで解りやすくて驚きました。
私が提示したSQL文が見るも無惨^^

大変助かりました!
ありがとうございました。

お礼日時:2012/01/21 02:35

こんなん、どうでしょうか。


SELECT * FROM test t1
WHERE (t1.col2 = false)
AND NOT EXISTS
( SELECT 1 FROM test t2
WHERE t2.col2 = false
AND t2.col3 < t1.col3 );
同じようなものかもしれませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

理想の結果が得られました!

NOT EXISTSですか…
私には全く思い付きませんでした^^;

解読できない箇所がありましたが、調べて少し理解しました。
とても勉強になりました。今後に生かせるよう努力します。

本当にありがとうございました。

お礼日時:2012/01/21 02:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す