複数テーブル表示による取引先名称の抽出方法
- 複数のテーブルを結合して取引先名称を抽出する方法について説明します。
- 元テーブル、取引先テーブル、取引先名称テーブルを結合し、取引先名称1と取引先名称2を取得します。
- 結果SQLでは、売先コードと需要家コードに対応する取引先名称を表示します。
- ベストアンサー
複数テーブル表示
こんにちは、 元テーブル⇒取引先テーブル⇒取引先名称テーブル構成から最終的に 結果SQLのように取引先名称1、取引先名称2を 出力したいと思っているのですが、二つを一緒に抽出させることが なかなか出来ません。 多分、複数のSELECT文をどうにかしないといけないのかとは 思うのですが、情報ありましたらお願い致します。 元テーブル ID l 売先コード l 需要家コード 1 l A l B 2 l C l B 3 l A l C 取引先テーブル ID l 売先、需要家コード l 取引先名刺ID 1 l A l A1 2 l B l B1 取引先名称テーブル ID l 取引先名刺ID l 取引先名称 1 l A1 l 売り先名称 2 l B1 l 需要家名称 結果SQL 売先コード l 需要家コード l 取引先名称1 l 取引先名称2 A l B l 売り先名称 l 需要家名称 C l B l (空白) l 需要家名称 A l C l 売り先名称 l (空白)
- lensent
- お礼率10% (42/402)
- SQL Server
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
SELECT 元テーブル.売先コード, 元テーブル.需要家コード, 売先名称テーブル.取引先名称 AS 売先名称, 需要家名称テーブル.取引先名称 AS 需要家名称 FROM 元テーブル LEFT JOIN 取引先テーブル AS 売先テーブル ON 売先テーブル.[売先、需要家コード] = 元テーブル.売先コード LEFT JOIN 取引先名称テーブル AS 売先名称テーブル ON 売先名称テーブル.取引先名刺ID = 売先テーブル.取引先名刺ID LEFT JOIN 取引先テーブル AS 需要家テーブル ON 需要家テーブル.[売先、需要家コード] = 元テーブル.需要家コード LEFT JOIN 取引先名称テーブル AS 需要家名称テーブル ON 需要家名称テーブル.取引先名刺ID = 需要家テーブル.取引先名刺ID; ですね。
関連するQ&A
- 複数テーブルの不一致クエリについて
SQLで、下記selectを行いたいです。 テーブルA テーブルB テーブルC これら三つのテーブルには、同一のコードが振られています。 この三つのテーブルのひとつにでも、抜けているコードを抜き出したいです。 (テーブルAのコード=テーブルBのコード=テーブルCのコードになっていないコード) 例) テーブルAに入ってるコード(1.3.5) テーブルBに入っているコード(1.4.5) テーブルCに入っているコード(1.5.6) このとき、三つのテーブルにきちんと入っているコードは、1と5だけなので、それ以外のコードを抜き出す→3.4.6 これをSQLで行う場合、簡単なSQL文はありますでしょうか? 今、考えているのは、各テーブルすべてをinner joinしたviewを作成し(これにより三つとも入ってるコードの一覧ができる)、 そのviewと、テーブルA、テーブルB、テーブルCそれぞれをひとつづつleft joinして、不一致データを取り出す方法です。 でも、そうすると、viewを作成しなくてはいけず、また、SQLをテーブルの数分(今回は3回)投げなくてはいけなくて。。 もっと、単純にかけないものでしょうか? ご存知の方、教えてください。
- ベストアンサー
- SQL Server
- 複数のテーブルからのデータ取得と連結
いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key) 名称A テーブル2 コードB(Key) 名称B テーブル3 コードA(Key) コードB(Key) コードC(Key) 名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。
- ベストアンサー
- Java
- データの無いテーブルと結合してデータ抽出
以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0 AA 1 BB 2 EE 3 FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2 2004 CC 3 2004 DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0 AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY = (SELECT MAX(C.DAY) FROM 履歴 C WHERE A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。
- ベストアンサー
- Oracle
- 複数テーブルの結合
マスターテーブル1つと、子テーブルが複数存在して子テーブルにはマスターテーブルのidを格納するフィールドがあり参照しなくなったときにはそのidを消去するといったデータベースがあったときにマスターIDごとに子テーブルのどれか1つでも参照していればカウントするみたいなSQLをつくりたいんですが select count(m.id) from master m inner join a on m.id = a.m_id inner join b on m.id = b.m_id inner join c on m.id = c.m_id group by m.id みたいなSQLだとAにデータが存在しなければB以降に存在しても期待した結果が出力されません。A、B、Cいずれかのm_idとマスター側のIDが等しければカウントするという出力をするためにはどのように書けばいいんでしょうか。 わかりづらい説明で申し訳ありませんがよろしくお願いします。
- ベストアンサー
- MySQL
- 複数テーブルの結合
テーブルA a_id id a_data a_date ----------- テーブルB id b_data b_date テーブルC id c_data c_date ----------- テーブルAとテーブルBは「id」がキーで1:N(Nは0も含む) テーブルAとテーブルCは「id」がキーで1:N(Nは0も含む) このような3のテーブルで a_idを検索キーにして次のフィールドのデータを抽出したいのですが。。。 ※テーブルCのc_dateを降順で先頭の1レコードのみ ※テーブルBのidをカウントする selectの結果(イメージ) id a_data a_date count(B.id) c_date ------------------------------------- 001 AAAA 2007/02/01 20 2007/02/14 005 BBBB 2007/02/02 0 2007/02/10 006 CCCC 2007/02/02 0 2007/01/08 003 DDDD 2007/02/01 100 002 EEEE 2007/02/01 9 004 FFFF 2007/02/01 0 よろしくお願いします
- 締切済み
- MySQL
- 複数のテーブルに対して・・・
過去に同様の質問があったかも知れませんが、Accessのバージョンがかなり古いので質問させて下さいね。 Access97(すみません、ホント古くて…)で、下のような顧客情報管理ファイルを作成しました。 テーブルA<→フォームA> ・顧客ID(主キー: テキスト型) ・氏名 ・情報A1, A2~ ・入力フォームB~への移動ボタン(同一IDレコードの表示) テーブルB<→フォームB> ・顧客ID(主キー: テキスト型) ・情報B1, B2~ テーブルC<→フォームC> ・顧客ID(主キー: テキスト型) ・情報C1, C2~ 最初からテーブルA~Cを結合したものを作ればよかったのですが、 それぞれのテーブルについて細かい入力項目が30~40個あるため、 分割して作成してしまいました(そして今後もテーブルは増える可能性大です)。 現在、テーブルAにだけ、20人分のデータが入っています。 今後も顧客数やテーブルが増える予定なのですが、 その都度テーブルごとに顧客IDをいれるのが面倒になってきました。 そこでお訊ねしたいのですが、テーブルA(を元にしたフォームA)に顧客IDを入れると、 テーブルBやCにも同じテキストが入力されるような設定は可能でしょうか。 最初、クエリーで連結しようとしたのですが、 既にテーブルAにいくつかデータが入っているせいか、どうも上手く反映されません。 単に私の参照方法が下手だったからかもしれませんが…。
- ベストアンサー
- オフィス系ソフト
- テーブルのどちらかにデータがない事があるテーブル結合について
■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で同じフィールドを2つ取りだしたい
以下のテーブルからCSVを出力する際、 ID | 名称 | コード1 | コード2 1 | A | 111 | 444 2 | B | 222 | 555 3 | C | 333 | 666 「ID/名称/コード1コード2」のように取りだす場合のSQL文は SELECT ID, 名称, コード1 || コード1 FROM テーブル名 となると思いますがこれを、「ID/名称コード1/名称コード2」のように同じフィールドを同じ行に2回登場させたい場合はどうすれば宜しいでしょうか。 SELECT ID, 名称 || コード1, 名称 || コード2 FROM テーブル名 とした場合にはエラーになってしまいます。 宜しくお願い致します。
- 締切済み
- PostgreSQL
- テーブルごとのカウント
PHP5.2+mysql 5.0.45で開発を行っております。 SQLに関する質問なのですが 以下のことが可能かどうかご教授いただきたく。 4つのテーブルがあります。 (例は適当です。項目の名称等は無視してください。) テーブルA ID Name Kana テーブルB ID NameID Pref City テーブルC ID NameID Tel Fax テーブルD ID NameID email CellPhone とします。 A.ID=1000の時各テーブルのレコード数が A:B:C:D=1:3:2:2となっています。 SQLの出力結果として A.ID A.Name A.Kana B.Count(ID) C.Count(ID) D.Count(ID) という、6項目を出力したいのですが 方法がわかりません。 試してみたのは select A.ID,A.Name,A.Kana,Count(B.ID),Count(C.ID),Count(D.ID) from A left join B on A.ID = B.NameID left join C on A.ID = C.NameID left join D on A.ID = D.NameID where A.ID = 1000 group by A.ID,A.Name,A.Kana ですが 結果、 A.ID = 1000 A.Name = Name A.Kana = Kana Count(B.ID) = 3 Count(C.ID) = 3 Count(D.ID) = 3 となってしまいます。 冷静に考えるとそうなんですが・・・ もしうまく結果を取得できる方法があればご教授いただきたく よろしくお願いいたします。
- ベストアンサー
- MySQL
- テーブルを結合
テーブルの結合に関して質問します。 ネットなどで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 よろしければアドバイスお願いします。
- ベストアンサー
- Oracle