• 締切済み

副問合せについて

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

  • MySQL
  • 回答数4
  • ありがとう数4

みんなの回答

  • 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

  • エクセルの重複データを削除したい

    エクセルの重複データを削除したいです。重複項目を一つにまとめるのではなく、重複があれば、その項目を全て削除したいです。 シート処理前 ------------ 東京都 神奈川県 千葉県 埼玉県 群馬県 東京都 神奈川県 ------------ これを重複処理します。東京都と神奈川県が重複しているので削除します。 シート処理後 ------------ 千葉県 埼玉県 群馬県 ------------ このような処理をどうしても行いたいです。 実際のデータは1万件以上あり、手動では不可能でした。 どうかお知恵をお貸し頂けませんでしょうか?

  • エクセルで文字列の乱数を作るには?

    例えば、 東京都、千葉県、神奈川県、栃木県、埼玉県、群馬県、茨城県の 7個の文字列があったとしまして、 エクセルでこの7個の文字列のうち5つをランダムで選んで結合し、ひとつの文にする方法はありますでしょうか? できれば、各々の間に『の』『と』『や』『が』『に』等の格助詞を入れて文にしたいと思っております。日本語としての意味は分からなくてもかまいません。 このようなひとつの文を各々の文字列が重複しないように順列で大量に作りたいと思っております。 例 1、千葉県の神奈川県に埼玉県の茨城県と群馬県 2、神奈川県と埼玉県の群馬県が千葉県や東京都 ・・・ セルで重複しないようにランダムに表示できれば、ひとつの文にするのはエディタ等でできますので、セルに表示させる段階まででもかまいません。 どうかよろしくお願いします。

  • INSERTを行う際に別の表のデータを使用する方法について

    Java(Servlet,jsp)、MySQL、Tomcatを使用して開発をしています。 INSERTを行う際に別の表のデータを使用したいのですが、 上手くいきません。 ご教授願いただけますと幸いです。 ■テーブル名:A_mst ■カラム 名前: Name 誕生日: Birthday 都道府県コード: Prefecture_Cd 住所: Address ■テーブル名:B_mst ■カラム 都道府県コード: Prefecture_Cd 都道府県名: Prefecture_Name ■処理内容 パラメーターから取得した「名前、誕生日、都道府県、住所」をA_mstに登録する。 ※A_mstには都道府県列はないため、B_mstから都道府県コードを取得しなければなりません。 String sql = "INSERT INTO A_mst" +"SELECT Prefecture_Name FROM B_mst" +"WHERE Prefecture_Name = Prefecture_Name" +"(Name,Birthday,Prefecture_Cd,Address)" +"values('#1','#2','#3','#4')"; sql = sql.replaceAll("#1",strNname); sql = sql.replaceAll("#2",strBirthday); sql = sql.replaceAll("#3",strPname); sql = sql.replaceAll("#4",strAddress); バージョンは以下になります。 jdk1.6.0_16 Tomcat 6.0 MySQL Server 5.1 何卒よろしくお願いいたします。

  • フォームからDBへの接続

    フォームからDBへのデータ挿入なんですが、どうしてもうまくいきません・・・。 MYSQLへの接続はうまくいくのですが・・・ <? $link=mysql_connect("localhost","****","::::"); mysql_select_db("@@@@@",$link); $sql=" insert into users( passwd, name, name_kana, seibetu, birthday, email, postal_code, xmpf, address1, address2 ) values( '$passwd', '$name', '$name_kana', '$seibetu', '$year-$month-$day', '$email', '$postal1', '$xmpf', '$address1', '$address2' )"; mysql_query($sql,$link); mysql_close($link); ?> 上記がソースです。 bithdayのフォールドはdatetimeで、年はyear月はmonth日はdayとしています なにかおかしいところありますか?

    • ベストアンサー
    • MySQL
  • 占い肯定派の皆様、関東地方に大きな地震は西暦何年何月何日に起こりますか?

    大きな地震 = マグニチュード7以上 関東地方 = 茨城県、栃木県、群馬県、埼玉県、千葉県、東京都、神奈川県 としています。地震が急に来たら怖いので、いつ来るのか教えてください。

  • SQLのIN演算子について悩んでいます。

    SQLのIN演算子について悩んでいます。 -------------------------------------------------------------------- <form method="get" action="index.php"> <input type="checkbox" name="check_addr[]" value="東京都"/>東京都<br /> <input type="checkbox" name="check_addr[]" value="千葉県"/>千葉県<br /> <input type="checkbox" name="check_addr[]" value="神奈川"/>神奈川<br /> <input type="submit" value="選択する" /> </form> --------------------------------------------------------------------- のフォームから下記のPHPで -------------------------------------------------------------------- $sql = "SELECT * FROM testvote WHERE mark = '0'"; if(isset($_GET["check_addr"])){ $array = implode(",", $_GET["check_addr"]); $sql = "SELECT * FROM testvote WHERE addr IN(" .$array. ")"; } ----------------------------------------------------------------------- チェックを入れた都道府県だけをMYSQLから取り出して表示させたいのですが、 どうにもうまく動きません。 色々と試しているのですが、IN演算子の中が数字などの場合はうまく動いています。 日本語でIN演算子を使用する場合はどうしたらいいのでしょうか? ちなみに addrの中には都道府県(埼玉県・東京都・・・)のデータが入っています。

    • ベストアンサー
    • PHP
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQL SELECT WHERE 条件 大量

    mysqlのSELECT文でWHEREを使い条件を指定する時、指定する条件が数十件~数百件合った場合どうすればよいのでしょうか? 例えば、 以下のような感じで名前カラムと住所カラムがあったとします name  address 田中  東京都 鈴木  大阪府 佐藤  北海道 加藤  沖縄県 中村  群馬県 小林  岐阜県 高橋  東京都 渡辺  大阪府 伊藤  北海道 山本  沖縄県 斎藤  群馬県 阿部  岐阜県     ・     ・     ・ そこで、東京都と大阪府と北海道の人だけをSELECT文で選択したいのですが、 WHERE `address` = '東京都' OR `address` = '大阪府' OR `address` = '北海道' というように、一つづつ記述していかなければならないのでしょうか? この例の場合だと3件だけの指定ですが、もしもっと膨大な量を指定したいとなったとき、とても効率が悪いように思います。 なにか良い方法はないのでしょうか? ちなみにPHPからMySQLを利用しているのですが、現在 $where = array(); foreach($address as $value){ $where[] = "`address` = '${value}'"; } $where = implode(' OR ', $where); としておいて、 mysql_query("SELECT * FROM table WHERE ${where}"); とする方法しか思いつきません。 もっとスマートな方法があれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 関東地方の隣接県の認識について

    関東地方は、東京都、神奈川県、埼玉県、千葉県、茨城県、栃木県、群馬県の1都6県からなります。(山梨県が関東地方に含まれる局面もあります。)福島県、新潟県、長野県、山梨県、静岡県は関東地方に隣接し、関東地方を取り囲んでいます。これら東京都、神奈川県、埼玉県、千葉県、茨城県、栃木県、群馬県、山梨県、長野県、新潟県、福島県、静岡県の1都11県は広域首都圏として、また、関東地方と関東地方の隣接県のうち、福島県と静岡県を除く甲信越地方は、関東甲信越地方として、また、関東地方と山梨県は首都圏として、さらに東京都、神奈川県、埼玉県、千葉県、茨城県の一部は東京圏を構成し、それぞれ、東京地方との経済的一体性を有しています。あなたはこの事実を知っていましたか?また、関東地方の隣接県のうち、認識していなかった県はどの県ですか?

  • 関東地方で一番好きな県、嫌いな県は?

    東京都は除く。 私は好きな県は神奈川県、嫌いな県は群馬県。