• ベストアンサー

select文の書き方

すみません、SQL初心者です。 joinで結合元の複数のカラムから結合先の同一のカラムの値を参照する方法がわかりません。 以下の場合、どうすればいいでしょうか。 テーブルseisekiとsimeiがあります。 seisekiにはテストIDとテスト毎の英語と国語のトップの生徒の生徒番号のカラムがあります。 simeiには生徒番号と生徒名カラムがあります。 2つのテーブルをjoinしてテストIDから英語と国語のトップの生徒の氏名を求める場合のselect文はどう書けば良いでしょうか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

simeiテーブルを2つ結合し それぞれ別の別名をつければいいです。 --- SELECT SS.テストID ,SM1.生徒名 as 英語トップ生徒名 ,SM2.生徒名 as 国語トップ生徒名 FROM seiseki SS LEFT JOIN simei SM1 ON SS.生徒番号 = SM1.生徒番号 LEFT JOIN simei SM2 ON SS.生徒番号 = SM2.生徒番号

bacchus047
質問者

お礼

なるほど!! ありがとうございました!!!

関連するQ&A

  • MySQLで複数のSELECT文を1文にまとめたい

    以下のようなテーブル table1 があります。 ******************* table1 ******************* Name, Kyouka, Score, ID ******************* 山田, 国語, 92, 10001 鈴木, 国語, 71, 10002 田中, 国語, 89, 10003 山田, 数学, 65, 10004 鈴木, 数学, 69, 10005 杉田, 英語, 96, 10006 山田, 英語, 63, 10007 田中, 英語, 76, 10008 ... ******************* カラムIDはPRIMARYを指定しています。 カラムScoreはインデックスを作成しています。 このテーブルで、「IDと教科」を指定したときに、以下の2つのデータを得たいと思っています。 (1) IDに対応する名前と、その教科中の順位 (2) その教科のレコード数 具体例としては、例えば「ID=10001、教科=国語」を指定したときに、「山田、3人中1位」というような情報が得たいです。 (「ID=10001、教科=英語」のようなおかしな組み合わせは指定しないようになっています。) (1) は、以下のようにして名前と順位を得る事が出来ました。 SELECT Name, (SELECT COUNT(*) + 1 FROM table1 b WHERE b.Score > a.Score and Kyouka='国語') AS rank FROM table1 a WHERE ID='10001' ORDER BY Score DESC; (2)は、以下のようにして特定の教科のレコード数を得る事が出来ました。 SELECT COUNT(*) FROM table1 WHERE Kyouka='国語'; しかし、実際にはレコード数が大量にあり、頻繁にこの検索を実行する予定なので、負荷が心配です。 出来るだけサーバーの負荷を減らすために、1回のSELECT文の実行で(1)と(2)をどちらも実現できるような方法はないでしょうか。 また、このテーブルでインデックスを作成しているのはIDとScoreのみですが、より負荷を減らすにはKyoukaにもインデックスを作成した方が良いでしょうか。 何卒、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで別テーブルでのSELECTでNULLの場合

    MySQLで以下のようなテーブルの場合 test_1 id name test_2 test_1_id name このような構造の場合、test_1からtest_2のselectでtest_1.id=test_2.test_1_idでjoinした場合に、 test_2にデータが存在していなかった場合、 test_1テーブルのnameを返すようなsqlはどのように記述すればよいでしょうか、、

    • ベストアンサー
    • MySQL
  • select文の書き方

    助けてください……(T-T) oracleをつかっていますが、SQLが苦手すぎて、どうしたらいいか分かりません。。。 解決策をご存じの方、教えていただけないで しょうか? テーブルは下記の2つがあります。 (1)Aテーブルの1カラムに、複数の商品IDを格 納している(カンマ区切り) (2)Bテーブルには、商品ID&商品名の一覧が ある このAテーブルの商品ID列に番号から、Bテー ブルの商品名を取得したいです。 ■Aテーブル no | 商品ID 1001 | 1、2 1002 | 1、2、3 1003 | 3 ■Bテーブル 商品ID | 商品名 1 | 商品A 2 | 商品B 3 | 商品C ■とりたいデータの形 1001 | 商品A、商品B 1002 | 商品A、商品B、商品C 1003 | 商品C カンマ区切りで格納しているとin句は使えな いと知りました。。 テーブルにカンマ区切りで格納することは、 変えることはできませんし、 SQLで1回で取得しなきゃいけないのです。 そんなこと、可能なのでしょうか。。 明日の朝までに教えていただければ、 すごくすごく助かります。。 すみませんが、宜しくお願いします。

  • SELECTした値でUPDATEしたいのですが

    <前提> ■oldテーブル ・idカラム ・createdカラム ・modifiedカラム ・その他色々カラム ■newテーブル ・idカラム ・createdカラム ・modifiedカラム ・その他色々カラム <やりたいこと> 両テーブルのidが一致するとき、 newテーブルの「created」「modified」カラムの値で、oldテーブルの同カラムを上書きしたい SQL文を教えてください

    • ベストアンサー
    • MySQL
  • select構文について

    テーブルを結合して各カラムを出力したいのですが、両方のテーブルに同じカラム名があった場合どのように処理したら言いのでしょうか? 次のようにやってみたのですが、テーブル名をASで置き換えるとうまくいかないのでしょうか。 $rs = mysql_query("select u.name,a.name, from user AS u LEFT JOIN address AS a ON u.id=a.id ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $username = $rec['u.name']; $officename = $rec['a.name']; echo '$username'; echo '$officename';

    • ベストアンサー
    • MySQL
  • Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭

    Select文で結合した時に、重複カラムが存在するのでテーブル名を先頭か末尾に自動でカラム名に付与して表示したいのですが、いい方法はないでしょうか? (asで1個1個変えるのではなく・・・) SELECT TABLE_A.*,TABLE_B.* FROM TABLE_A LEFT JOIN TABLE_B ON TABLE_B.ID = TABLE_A.ID 表示 : TABLE_A_ID | TABLE_B_ID みたいのを考えています。

    • ベストアンサー
    • MySQL
  • SQL(PostgreSQL) select文

    SQLを始めたのですが、少しつまずいたので、質問させてください。 住所録検索等で、 SELECT * FROM test WHERE name LIKE '%goo%'; と書くと、nameというカラム名から goo という文字列の入ったレコードを 検索できると思います。 そこで、この goo という文字列を test テーブル全体から検索したいのですが わかりません。 teat テーブル全体から(どこのカラム名からでも)検索の仕方を教えてください。 初歩的な質問ですみません。 参考HPでもかまいません。

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL
  • MySQL テーブルの結合

    顧客ごとにテーブルを作る香ばしいプログラムのSQL文を書くことになりました。 user_0001 user_0002 user_0003 user_0004 user_0005 といった具合にどんどん増えていきます。 カラムは仮に id, name, tel が入っているとします。 プログラムの修正は行えません。 通常JOIN句でテーブルの結合を行うと思うのですが、「user_」という文字列を含んでいるテーブルを全て結合せよ!みたいな命令文はSQLで書けるのでしょうか? 無理、無駄、素直にプログラムで出せ、というアドバイスでも構いませんのでよろしくお願いします。

    • ベストアンサー
    • MySQL
  • ACCESS重複した場合数値の高いレコードのみ表示

    ACCESSで成績管理をしています。 同一人物が同じ科目を複数回受験した場合、「成績の数値が高いレコード」のみを残し表示をしたいと考えています。 テーブル名:T_成績 ID 生徒番号 氏名  科目  成績 1  12001    田中  数学  10 2  12001    田中  英語  10 3  12001    田中  英語  20 4  12001    田中  国語  10 5  12002    吉田  数学  30 6  12002    吉田  数学  40 7  12002    吉田  国語  20 ↓ ID 生徒番号  氏名 科目  成績 1  12001     田中  数学  10 3  12001     田中  英語  20 4  12001     田中  国語  10 6  12002     吉田  数学  40 7  12002     吉田  国語  20 クエリ(SQL等)でどのような記述を行えばいいでしょうか。 よろしくお願いします。