民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS SQLiteの面白さ(17) 複数列のサブクエリ

<<   作成日時 : 2008/06/28 00:37   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

MySQLなんかでたまにやる
SELECT * FROM t1 WHERE (col1, col2, col3) = (SELECT col1, col2, MAX(col3) FROM t1);
というような複数列のサブクエリを、SQLiteでもできないかと思い、試してみた。
col1、col2に生徒の成績関連のデータが入っていてcol3に試験の日付が入っているような場面で、それぞれの生徒の最新の成績だけを抽出したいといった場合に使うクエリだ。生徒によっては最近の試験を欠席しているかも知れないのでその場合はそれに次ぐ直近の試験の成績を表示したい、という条件がつくとこのようなクエリになる。
なお、このようなクエリはMySQLのマニュアルでは Row Subqueries と呼ばれている。日本語訳は「行副問い合わせ」となっていた。

で、これをSQLiteで試したところ、うまくいかなかった。構文エラーになってしまう。

ならば結果は同じということで、
SELECT * FROM t1 INNER JOIN (SELECT col1, col2, MAX(col3) AS col3 FROM t1) AS t2 ON t1.col1 = t2.col1 AND t1.col2 = t2.col2 AND t1.col3 = t2.col3;
といった感じでSQLを書き換えたところ、こちらはエラーにならず動作してくれた。結果も意図どおりだった。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
SQLiteの面白さ(17) 複数列のサブクエリ 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる