• ベストアンサー

3テーブルのUNIONについて

はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 前提 テーブルA(ID、過去データ) テーブルB(氏名、得点、学年、組) テーブルC(ID、氏名、年齢、住所) 条件 A.ID = C.ID  AND B.氏名 = C.氏名 取得 B.氏名 B.得点 B.学年 上記のSQLをUNIONで記載するにはどうすれば良いでしょうか。 以上です。回答の方をよろしくお願い致します。

  • c_gen
  • お礼率79% (19/24)
  • Oracle
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

select B.氏名,B.得点,B.学年 from a,b,c where c.ID=a.ID and c.氏名=b.氏名 select B.氏名,B.得点,B.学年 from c inner join a on c.ID=a.ID inner join b on c.氏名=b.氏名

c_gen
質問者

お礼

ご回答頂きありがとうございました。 参考になりました。

関連するQ&A

  • テーブルの結合について

    お世話になります。 ACCESSで、以下のテーブル(1)をベースにテーブル(2)をUNIONさせ、テーブル(3)の様に作成したいです。 どのような方法で実現できるのでしょうか? テーブル(1) id ,pass,biko 001,1234, a 002, 0, 0 003, 0, 0 004, 0, 0 005, 0, 0 テーブル(2) id ,pass,biko 002,2345, b 003,3456, c 004,4567, d 005,5678, e テーブル(3) id ,pass,biko 001,1234, a 002,2345, b 003,3456, c 004,4567, d 005,5678, e また、テーブル(3)をSQL Serverにも同一のものをコピーしたいのですが どの様にすればいいでしょうか? ODBC接続は出来ております。 お手数ではありますが、ご回答をお待ちしております。

  • テーブルのどちらかにデータがない事があるテーブル結合について

    ■table a のテーブル構成 date a_id b_id c_id a_count ■table b のテーブル構成 date a_id b_id c_id b_count value 上記の2つのテーブル構成から、 ■date a_id b_id c_id毎の集計データ date a_id b_id c_id a_count b_count value を抽出するSQLが知りたいです。 table aにあって、table bに存在しない。又は逆もある為、 union しかないと思うのですが、思いつきません。。

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

    SQLのSELECTについて質問です。 テーブルA、B、Cから情報を取得し、下記の画面イメージを表示させたいのですが、 どのようにテーブルを結合すればよいか判りません。 どなたかご教示ください・・・。よろしくお願いします。 #テーブルCから組名を取得するような処理は画面表示のロジックで行います。 #テーブルA、Bの結合についてのみ、教えていただきたいです。 条件 ・氏名と、所属情報の○×を表示したい ・DISTINCT等、重たい処理は避けたい 画面イメージ |氏名  |赤組|白組|青組| ------------------------------ |山田太郎|○ |× |× | |山田花子|× |○ |○ | テーブルA |個人ID|氏名  | -------------------- |000001|山田太郎| |000002|山田花子| テーブルB |個人ID|組コード| -------------------- |000001|1110  | |000002|1111  | |000002|1112  | テーブルC |組コード|組名| ------------------ |1110  |赤組| |1111  |白組| |1112  |青組|

  • UNIONなどで複数のテーブルから上位10件などSELECTする方法

    1店舗1テーブルのデータベースにしております。 全店の在庫を検索した時に、まとめてSELECTすると重いため、 TOP100などで、1~100,100~200などと分けたいです。 単テーブルでの分け方は何とか分かっていますが、 複数のテーブルをUNIONで結合した場合の分け方が分りません。 ■ 現状:全店の在庫を各店のテーブルより、取得しています。 SELECT dbo.A店TB.ID, dbo.A店TB.BRAND, dbo.A店TB.CODE, dbo.A店TB.STOCK, dbo.A店TB.STORE FROM dbo.A店TB" + " where dbo.A店TB.CODE like '%" + txbCode.Text + "%' AND" + " dbo.A店TB.BRAND like '%" + txbBrand.Text + "%' AND" + " dbo.A店TB.STOCK > 0" + " UNION " + "SELECT dbo.B店TB.ID, dbo.B店TB.BRAND, dbo.B店TB.CODE, dbo.B店TB.STOCK, dbo.B店TB.STORE FROM dbo.B店TB" + " where dbo.B店TB.CODE like '%" + txbCode.Text + "%' AND" + " dbo.B店TB.BRAND like '%" + txbBrand.Text + "%' AND" + " dbo.B店TB.STOCK > 0" + " UNION " + "SELECT dbo.C店TB.ID, dbo.C店TB.BRAND, dbo.C店TB.CODE, dbo.C店TB.STOCK, dbo.C店TB.STORE FROM dbo.C店TB" + " where dbo.C店TB.CODE like '%" + txbCode.Text + "%' AND" + " dbo.C店TB.BRAND like '%" + txbBrand.Text + "%' AND" + " dbo.C店TB.STOCK > 0" ■ 問題:1店舗、1万レコード(件)のデータがあり、実際には10店舗ほどからデータを取ってくるため、読み込みに時間がかかってしまいます。 ■ やりたいこと:最初の100件だけをSQLのSELECTで取得するクエリを書きたいです。別のプログラムで以下のように書きましたが、 これを上記のUNIONを使ったクエリでもやりたいと考えています。具体的なコードが思いつきません。お願いします。 SELECT TOP 100 BlogTB.TITLE,BlogTB.TEXT " + "FROM BlogTB WHERE ID NOT IN(SELECT TOP 200 ID FROM BlogTB ORDER BY ID DESC) ORDER BY ID DESC"

  • updateの一括実行

    SQLに関しまして質問させて頂きます。 更新元テーブルA、マスタテーブルB、更新先テーブルCがあり、 以下のような条件を一つのSQL文で実現したいと思っています。 【条件】 (1)Aのe列が1のものを対象に更新をかける (2)条件(1)を満たすレコードの各所属&氏名をマスタBのIDに置き換え、テーブルCに更新 【テーブルA(更新元)】 ----------------------------------------------- No 所属1 氏名1 所属2 氏名2 所属3 氏名3 e 01 A01  ああ  A01  いい  C01  おお 1 02 A01  いい  A01  うう  C01  おお 0 03 B01  ああ  B01  ええ  C01  おお 1 ----------------------------------------------- 【テーブルB(マスタ)】 ----------------- ID  所属 氏名 001  A01  ああ 002  A01  いい 003  B01  ああ : ----------------- 【テーブルC(更新先)】 ------------------ No ID1 ID2 ID3 01 001 002 025 02 002 003 025 03 011 014 025 ------------------ テーブルAが1レコードであれば update C set ID1=(select ID from A, B where A.所属1=B.所属 AND A.氏名1=B.氏名) ID2=(select ID from A, B where A.所属2=B.所属 AND A.氏名2=B.氏名) ID3=(select ID from A, B where A.所属3=B.所属 AND A.氏名3=B.氏名) where No='01' で行くのですが、10000行の更新で10000回update文を発行すると処理に時間がかかります。 そこで、updateの一括実行を行いたいと考えています。 ご存知の方がいらしましたら、 ご教授よろしくお願い致しますm(_ _)m 【環境】 oracle 9i

  • UNIONする際、片方テーブルしかないカラムも利用

    UNIONする際、片方のテーブルしかないカラムも利用したいのですが、どうすればよいでしょうか? ■現状 SELECT tablename, id, level  FROM (   SELECT \'A\' tablename, s.id, s.level FROM A s    UNION ALL   SELECT \'B\' tablename, r.group_id, r.level FROM B r  ) as UNI ■やりたいこと ・テーブルAにしかないカラム「age」も一緒にSELECTしたいのですが、どうすれば良いでしょうか? ・UNIONしたいわけではなく、UNIONした後のレコード同様、「age」カラムもSELECTしたい、という意味です ・UNIONの外側で何かやればいいのかな、と思い試したのですが、うまくいきませんでした

    • ベストアンサー
    • MySQL
  • SQLで二つのテーブルを統合したい

    お世話になります。 Access2000のSQLで質問させて下さい。 下記のAとBのテーブルがある状態で、二つを統合した Cを生成したいのですが、どのようにSQLを作成したらよいでしょうか? お手数でもうしわけございませんが、SQL文で回答頂ければ助かります。 --テーブルA--- ID 名前 11 やまだ 12 さかもと --テーブルB--- ID 名前 25 きのした 26 つちや --C-- ID 名前 11 やまだ 12 さかもと 25 きのした 26 つちや

  • テーブルの結合・・・

    教室テーブル id, class 1, A組 2, B組 3, C組 生徒テーブル id, name 1, 佐藤 1, 山田 2, 鈴木 3, 田中 3, 後藤 3, 加藤 という二つのテーブルがあります。 これらをLEFT JOINで結合したのですが。 A組, 佐藤 A組, 山田 B組, 鈴木 C組, 田中 C組, 後藤 C組, 加藤 となってしまいます。 これを同じ教室名でまとめて、 A組, 佐藤 山田 B組, 鈴木 C組, 田中 後藤 加藤 というように表示したいのです。 できればクエリだけで解決したいのですが・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL
  • unionの結果は集計はできないですよね。。。。

    【明細データ】と【変換テーブル】で、変換後明細データを作成 して、その結果を集計したいのですが、、、 下記の結果を求めるためにはSQLひとつで可能でしょうか? ※(3)の表まではunionで可能でしたが、unionでは集計はできないですよね。。。。 (1)【明細データ】 CODE VALUE AMOUNT A 1000 10000 B 2000 20000 C 3000 30000 D 4000 40000 E 1001 10000 F 2001 20000 G 3000 30000 H 4000 40000 (2)【変換テーブル】 VALUE1 VALUE2 1000 1001 2000 2001 (3)【変換後明細データ】 CODE VALUE AMOUNT A 1001 10000 B 2001 20000 C 3000 30000 D 4000 40000 E 1001 10000 F 2001 20000 G 3000 30000 H 4000 40000 (4)【SQL抽出結果】が欲しい VALUE AMOUNT 1001 20000 2001 40000 3000 60000 4000 80000

  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。