• 締切済み

副問い合わせ

今はこのようなSQL文を書きたいですが・・ table1 user_id | time 1 | 122120 2 | 100530 table2 user_id | name 1  | 佐藤 2    | 田中 SQL文       結果はこう user_id|name| time 001 |佐藤| 122120 002 |田中| 100530 に出力したいけど、初心者なので、方法が良くわかりません。 ご教授ください。

  • dcdxj
  • お礼率28% (4/14)

みんなの回答

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

2つのテーブルを user_id をキーに結合してやれば良いと思います。副問い合わせ等は特に必要ないかと。 例) --------------------------------------------------------------- SELECT t1.user_id, t2.name, t1.time FROM table1 t1 INNER JOIN table2 t2 ON(t1.user_id = t2.user_id) ORDER BY t1.user_id ------------------------------------------------------------------- 片方のテーブルにしかデータが無い場合でも出力したい場合は、「INNER JOIN」の部分を適宜「LEFT OUTER JOIN」「RIGHT OUTER JOIN」などに変えて下さい。 また、行の順番を変えたい場合は、「ORDER BY」の後を変えて下さい。

参考URL:
http://www.atmarkit.co.jp/fnetwork/rensai/sql04/sql1.html
dcdxj
質問者

補足

ありがとうございました。うまく動きました。

関連するQ&A

  • 副問い合わせの書き方について

    以下のようにテーブルを作成され、データが 格納されています。 CREATE TABLE IDLIST( MAINID number(1), SUBID number(1), FLAG number(1), NAME varchar(10) ); MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤さん 1 3 0 佐藤 2 1 1 田中さん 2 2 0 田中 このデータにおいて、FLAGが1であるNAMEをその他の 同一IDにコピーしたいと考えています。 つまり、期待する実行結果は以下のようになります。 MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤様 1 3 0 佐藤様 2 1 1 田中さん 2 2 0 田中さん SQL文を以下のように考えてみましたが、 update IDLIST set NAME = ( select NAME from IDLIST where MAINID = ( select MAINID from IDLIST where FLAG = 1) AND FLG = 1 ); この場合はMAINIDが複数のとき、副問い合わせにて 結果が複数あるため、エラーが発生します。 複数返ってくる結果をどのように処理してあげれば よいか困っています。 是非とも1つのSQLで実現させたいと考えています ので、知恵をお貸し頂きたいと思います。 よろしくお願い致します。

  • いくつ続いているか知りたい

    バージョン4.1.16を使っています。 id BIGINT PRIMARY KEY UNSIGNED AUTO_INCREMENT, user_name VARCHAR(64), というテーブルがあったとして、idの大きい(最近の)方から 順番にuser_nameがいくつ続いているか知りたいのです。 例えば、 id    user_name 8      佐藤 7      佐藤 6      佐藤 5      佐藤 4      佐藤 3      鈴木 2      佐藤 1      佐藤 だった場合、佐藤はid「8」から数えてid「4」までの5連続ですよね。 こういうのを知るためにはSQL文ではどのように書けば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • 関連テーブルのレコード数の取得

    SQL初心者です 関連テーブルのレコード数を取得したいのですがうまくいきません テーブル名:user user_id,user_name 1,aaa 2,bbb 3,ccc テーブル名:user_agreements user_id,money 1,5000 2,3000 2,5000 1,8000 2,4500 3,10000 3,2500 上記のようなデータがあった場合に、ユーザーIDと契約件数という結果を得たいと思っています user_id,sum_agreements 1,2 2,3 3,2 このような結果を得る為のSQL文はどのように書けば宜しいでしょうか 宜しくお願い致します

  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL
  • Mysqlで複数テーブルの参照

    Mysqlで複数テーブルの参照 お世話になります。Mysqlについて質問させてください。 現在、それぞれnameとdateとflagの3フィールドをもつテーブルが、2つあります。 もともと別の用途で準備したものなのですが、 2つのテーブルのflagを参照して、1のものだけdate順に並べることが出来るでしょうか? ■テーブル1 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  田辺 | 2010-10-01 | 2 -----------------------------  田所 | 2010-11-01 | 2 ----------------------------- ■テーブル2 -----------------------------  name |  date  |flag| -----------------------------  加藤 | 2010-10-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  織田 | 2010-12-01 | 2 -----------------------------  斎藤 | 2010-01-01 | 2 ----------------------------- ■求める結果 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  加藤 | 2010-10-01 | 1 ----------------------------- 具体的なSQL文でなくとも構いません。参考になるような情報、サイトをご存じでしたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブル結合方法について

    MySQL5.1で、Table a ,Table b から、Table cのように取り出したいのですが、 SQLでSELECTする方法がわかりません。 Table b優先だけど、Table aにしかデータがない場合もあるといった感じです。 Table a No  Name 1 加藤 2 佐藤 3 田中 Table b No Name 2 佐藤先輩 4 田辺先輩 Table c No Name 1 加藤 2 佐藤先輩 3 田中 4 田辺先輩 どうか、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 数種類のテーブルの呼び出し

    こんにちは。 全く違うフィールドを含む数種類のテーブルを全て呼び出して一覧表示するためにはどういった命令を実行すればよいのでしょうか? selectはsql文の中で一度しか使えないということはわかったのですが・・・ 例えばテーブル1(フィールドはnumber,name)テーブル2(フィールドはdate,time) とした時、出力される結果としては テーブル1 number,name テーブル2 date,time ということです。 select文を2回使えるのであれば、 $sql = "select * from テーブル1 and select * from テーブル2"; という命令でいけると考えたのですが・・・

  • 次の条件を満たすSQL文をご教示下さい。

    テーブル名: list no | first_name | last_name | comment ----+------------+-----------+--------- 1 | 太郎 | 山田 | ほげ 2 | 次郎 | 田中 | ふが 3 | 花子 | 山田 | ぴよ 4 | 三郎 | 佐藤 | ぴよ 5 | 太郎 | 山田 | ぴよ 6 | 次郎 | 田中 | ふー 7 | 三郎 | 佐藤 | ふー 8 | 花子 | 山田 | ふー 上記の表から同じ”last_name”を持つ人の”first_name”と”last_name”を重複無しで抽出する(下記のような結果)SQL文は作成可能でしょうか。 結果 first_name | last_name ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • Postgresqlの自己結合について

    first_table f_id f_name 1 鈴木 2 田中 3 佐藤 last_table l_id l_name 1 一郎 1 二郎 2 太郎 3 次郎 欲しい結果 id f_name l_name1 l_name2 1 鈴木 一郎 二朗 2 田中 太郎 (空白もしくはNULL) 3 佐藤 次郎 (空白もしくはNULL) PHP4.3.2とPostgresql7.4.29の環境です。 first_tableとlast_tableの2つのテーブルがあって、 欲しい結果のような表を作成したいです。 l_name1やl_name2でのキーワード検索も行いたいので、1つのSQL文を発行したいのですが、 どのように書けば良いのでしょうか? last_tableを自己結合し、first_tableと結合するのが近い気がするのですが。 SELECT * FROM first_table AS f INNER JOIN ( SELECT l1.l_id, l1.l_name AS l_name1, l2.l_name AS l_name2 FROM l_table AS l1, l_table AS l2 WHERE l1.l_name > l2.l_name AND l1.l_id = l2.l_id ) AS l ON f.f_id=l.l_id よろしくお願いします。

  • mysqlのif文かcase文で複数条件を指定する

    mysql初心者です。 3つのテーブルでスケジュールの仕組みを考えていますが Staff→スタッフデータ id  name 1   田中 Sch1→日付出勤 id  start_time  end_time  date  flg 1   9:00   22:30   2014-03-17   1 Sch2→曜日出勤 id  start_time  end_time  dateW 1   9:00   22:30   1 ※dateWは曜日(0~6) 日付出勤優先なので、なければ曜日出勤を出力します。 たとえば、 田中さん (1)日付登録:2014-03-17(月) 09:00-18:00 (2)曜日登録:1(月) 10:00-19:00 (3)曜日登録:2(火) 09:00-18:00 PHP側でやるなら、 for (一週間分回す) { if (Sch1[date]) { 日付設定出力 }else{ 曜日設定出力 } } 全出力した(日付、曜日)データを一個の配列に入れて、start_timeでソートするかで出力する。。 Mysqlのif文かcase文分でどう書いたらいいですか? 説明が下手ですが、 どなたかご存知の方がいらっしゃれば是非、ご教授ください。

    • ベストアンサー
    • MySQL