• 締切済み

副問合せについて

現在使用している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 埼玉県

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

あ、#3の2行目はFROMがぬけてました。失礼しました。 SELECT @MAXBIRTH:=max( birthday) FROM テーブル WHERE group = 2; SELECT group, name, birthday, address FROM テーブル WHERE birthday=@MAXBIRTH;

yoshi_t
質問者

お礼

やはりサブクエリーが使えないと、一回の問合せで取るのは無理でしょうか... 現在、UNIONが使えないか試みているのですが、使い方が良く分からない事もあり、結果が取得出来ません。 教えて頂いた変数を使う方法で実装しようと思います。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

すみません。よくよく考えたらMAXでできますよね。 それと、変数をつかえば2段階で検索できます。 SELECT @MAXBIRTH:=max( birthday) FROM テーブル WHERE group = 2; SELECT group, name, birthday, address WHERE birthday=@MAXBIRTH;

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえずはソートしてLIMITで抜き出せばよい気がしますが MAXが2つ以上ある場合はどうするつもりでしょう? SELECT group, name, birthday, address FROM テーブル WHERE group = 2 ORDER BY birthday DESC LIMIT 1

yoshi_t
質問者

お礼

回答ありがとうございます。 おっしゃる通り、同じ誕生日の人がいた場合は、洩れてしまいますね。 出来ればMAXが複数な場合は、複数行返してもらいたいのが希望です。 でも、LIMITを使う方法は参考になりました。 ありがとうございました。

回答No.1

まず始めにお聞きしたいのですがMySQLのバージョンは? ・MySQL バージョン 4.1 以降では、標準 SQL で規定されているサブクエリのすべての形式と操作に加え、MySQL 固有のいくつかの機能をサポートしています。 ・バージョン 4.0 より前の MySQL では、サブクエリの使用を避けたり、その使用に対処する必要がありました。

yoshi_t
質問者

補足

MySQL バージョン は3.51です。

関連するQ&A