- 締切済み
副問合せについて
現在使用しているMySQLではサブクエリーが使えないそうで困っています。 以下の表から、group = 2 に所属している人達の中でもっとも若い人MAX(birthday)の 総ての項目(group name birthday address)を取得したいのですが、 サブクエリーを使わずに取得するには、どの様なSQL文で問い合わせたらいいか教えて頂けないでしょうか、 よろしくお願いします。 group name birthday address 01 Aさん 1971-05-21 東京都 02 Bさん 1981-02-03 神奈川県 01 Cさん 1980-07-26 群馬県 01 Dさん 1976-10-31 埼玉県
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
あ、#3の2行目はFROMがぬけてました。失礼しました。 SELECT @MAXBIRTH:=max( birthday) FROM テーブル WHERE group = 2; SELECT group, name, birthday, address FROM テーブル WHERE birthday=@MAXBIRTH;
- yambejp
- ベストアンサー率51% (3827/7415)
すみません。よくよく考えたらMAXでできますよね。 それと、変数をつかえば2段階で検索できます。 SELECT @MAXBIRTH:=max( birthday) FROM テーブル WHERE group = 2; SELECT group, name, birthday, address WHERE birthday=@MAXBIRTH;
- yambejp
- ベストアンサー率51% (3827/7415)
とりあえずはソートしてLIMITで抜き出せばよい気がしますが MAXが2つ以上ある場合はどうするつもりでしょう? SELECT group, name, birthday, address FROM テーブル WHERE group = 2 ORDER BY birthday DESC LIMIT 1
お礼
回答ありがとうございます。 おっしゃる通り、同じ誕生日の人がいた場合は、洩れてしまいますね。 出来ればMAXが複数な場合は、複数行返してもらいたいのが希望です。 でも、LIMITを使う方法は参考になりました。 ありがとうございました。
- bakenshibakenshi
- ベストアンサー率44% (13/29)
まず始めにお聞きしたいのですがMySQLのバージョンは? ・MySQL バージョン 4.1 以降では、標準 SQL で規定されているサブクエリのすべての形式と操作に加え、MySQL 固有のいくつかの機能をサポートしています。 ・バージョン 4.0 より前の MySQL では、サブクエリの使用を避けたり、その使用に対処する必要がありました。
補足
MySQL バージョン は3.51です。
お礼
やはりサブクエリーが使えないと、一回の問合せで取るのは無理でしょうか... 現在、UNIONが使えないか試みているのですが、使い方が良く分からない事もあり、結果が取得出来ません。 教えて頂いた変数を使う方法で実装しようと思います。 ありがとうございました。