[初心者]A表の2つの値からB表を検索する
- 初心者でもわかるSQL文の書き方を教えてください。
- A表のB_ID_1とB_ID_2の値を使用してB表のIDとnameを検索する方法を教えてください。
- SQL文を勉強するにはどのサイトがおすすめですか?
- ベストアンサー
[初心者]A表の2つの値からB表を検索する。
初心者でいろいろと調べてみたのですが、どうしてもわかりませんでした。分からないので質問します。 A表 ID | B_ID_1 | B_ID_2 1 | 1 | 5 2 | 2 | 6 3 | 2 | 1 B表 ID | name 1 | 1a 2 | 2b 3 | 3c 4 | 4c 5 | 5c 6 | 6c とあった時 、以下の結果を出力したいのです。 ID | B_ID_1 |ID_1_name| B_ID_2|ID_2_name| 1 | 1 | 1a | 5 | 5c 2 | 2 | 2b | 6 | 6c 3 | 2 | 2b | 1 | 1a A表のB_ID_1 B_ID_2 からB表のIDを検索して一つの表にしたいとおもっているのですが、どのようなSQL文を記述してよいかが分かりません。 また、SQL文を勉強するのに良いサイトがありましたらお教えください。 よろしくおねがいします。
- koipo
- お礼率88% (16/18)
- MySQL
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
推察ですが、A表のB_ID_1列と、B_ID_2列にB表の対応する名前を表示 するという前提でお話します。 B_ID_1、B_ID_2 は別々のフィールドなので、各々に結合させます。 SELECT A.ID, A.B_ID_1,X.name AS ID_1_name, A.B_ID_2,Y.name AS ID_2_name FROM (A表 A INNER JOIN B表 X ON A.B_ID_1=X.ID) INNER JOIN B表 Y ON A.B_ID_2=Y.ID (1)使うテーブルはA表、B表×2なので、それぞれを識別するために 別名(相関名という)を割り当てます。A表→A、B表(その1)→X B表(その2)→Y (2)最初の列はA表のIDなので、A.IDとなります。(SELECTの直後) (3)次はA表のB_ID_1と、対応するB表(その1)のnameです。 列名として「ID_1_name」をAS句で割り当てます。(2行目) (4)最後はA表のB_ID_2と、対応するB表(その2)のnameです。 列名として「ID_2_name」をAS句で割り当てます。(3行目) (5)結合式はA表のB_ID_1とB表(その1)のID、及びA表のB_ID_2と B表(その2)のIDです。(FROM句 以降の書き方を参照) 相関名.列名で、フィールドを特定しています。列名に同じものが 無ければ、修飾しなくても良いのですが、本例ではB表が2個ある ので、どちらの方のデータかを明示的に指示する必要があります。 尚、B_ID_1やB_ID_2の値がB表に無いデータは表示されません。 もし、B表に無くても表示させたい(nameの所はNullになる)場合は 予約語"INNER"を"LEFT"にしてください。
その他の回答 (1)
- level2012
- ベストアンサー率63% (12/19)
テーブルの設計を考え直した方がよろしいのではないでしょうか? そのような場合は、B_ID_1 と B_ID_2 というテーブルを用意したらどうですか?
お礼
お返事ありがとうございます。 テーブル設計はソフトハウスが設計して、ソフトハウスが潰れたため 悩ましい状態です。 恐ろしくして、Select文しか発行できないのが現状です。
関連するQ&A
- MySQLの検索について
MySQLの検索について id | name | price 1 | A | 100 2 | B | 1200 3 | A | 150 4 | A | 175 5 | B | 1150 6 | C | 500 7 | C | 600 8 | D | 300 仮にこのようなテーブルがあったとします。 このテーブルを、以下の形で出力したいのです。 A | 100 A | 150 A | 175 B | 1150 B | 1200 C | 500 C | 600 next page(D以下は次のページ以降で表示) つまり、nameの項目は指定した項目数だけを出力。 1ページに表示するnameの数は決まっている。 ただし、表示されるnameにあたるレコードは数に関係なく全て出力し、nameごとにpriceでソートする。 クエリーを2回発行し、プログラム側での処理を交えれば実現できるのですが、できればDBに問い合わせる回数は減らしたいと考えています。 上記の事を1度で実現するSQLが存在する、あるいはより優れたやり方があるのでしたら、ご教授いただければ幸いです。
- ベストアンサー
- MySQL
- 検索フォーム nameがAもしくはBもしくはCの値が○○であれば、結果を表示させる
以下のような検索フォームはできるでしょうか? 「name=AもしくはBもしくはC の値が○○であれば、結果を表示させる」 <SELECT name="AもしくはBもしくはC"> <OPTION value=""> 月を選択 </OPTION> <OPTION value="01">1月</OPTION> <OPTION value="02">2月</OPTION> <OPTION value="03">3月</OPTION> <OPTION value="04">4月</OPTION> </SELECT> 初心者なので、教えていただけると助かります。 よろしくお願いします。
- 締切済み
- HTML
- JOINを使ったSQL文を作成しようとしています。
JOINを使ったSQL文を作成しようとしています。 以下の様な3つのテーブルがある場合のSQL文を教えて下さい ※勉強の為、適当なテーブルを作成しましたが、やりたい事は JOINの中に更にJOINさせたSQL文を作成したいと思ってます 表A USER_ID(プライマリキー) NAME 表B USER_ID(プライマリキー) ※表A.USER_IDと紐着く BUMON(プライマリキー) TERM(プライマリキー) 表C BUMON(プライマリキー) ※表B.BUMONと紐着く TERM(プライマリキー) ※表B.TERMと紐着く MEMBER 【取得したい項目】 表A.USER_ID 【抽出条件】 表CのMEMBERの値が'10','20'以外(である表AのNAMEを取得)
- ベストアンサー
- Oracle
- SQLの勉強を始めたばかりの初心者です。
SQLの勉強を始めたばかりの初心者です。 2つのテーブルを結合し、以下のような結果を求めるSQL文はどう記述したら良いのでしょうか? アドバイス頂きたく、よろしくお願い致します。 【テーブル1】 ID Data Name ------------------------------------------------ 1 AAA あいう 5 BBB かきく 7 CCC さしす 8 DDD たちつ ------------------------------------------------- 【テーブル2】 ID Information Index -------------------------------------------------- 5 Error 100 8 Check 200 15 Warnning 300 20 Non 0 -------------------------------------------------- 【取得したい結果】 ID Data Name Information Index ------------------------------------------------- 1 AAA あいう 5 BBB かきく Error 100 7 CCC さしす 8 DDD たちつ Check 200 15 Warnning 300 20 Non 0 ------------------------------------------------- つたない説明で申し訳ありません… なお使用しているのはSQL Server 2008です。
- 締切済み
- SQL Server
- 検索結果の値を返すマクロ
以下のような表で列「A」にある値を「C1~I1」より検索し 一致するものがあれば、列名を「B列」に返すマクロを作りたいのですが、どのようにマクロを記述したら良いでしょうか? A B C D E F G H I 10 20 30 40 50 60 80 10 20 10 50 60 勉強してみたのですが、変数をどのように使っていいか判りません。 ご助言いただければと思います。
- ベストアンサー
- オフィス系ソフト
- LEFT OUTER JOIN でB表の制限付きで表示したいのですが
はじめまして。midwagonです。 SQLがわからないので教えてください。 A表:id,name B表:id,hiduke これを結合してA表にあるものをすべて表示したいのですが B表のhiduke="20080531" と 日付の制限をかけると何もかえってきません。 どうすればいいのか教えてください。 select A.id,A,name from A left outer join B on A.id=B.id where B.hiduke="20080531";
- ベストアンサー
- SQL Server
- 二つの表の項目を比較して値を取得するSQL
お世話になります、 二つの表の項目を比較して値を取得するSQLを作成しているのですが、うまくいきません。 具体的には Aテーブル NAME | PRICE ------|------ リンゴ | 100 ------|------ オレンジ | 200 ------|------ ブドウ | 300 ------|------ Bテーブル NAME | PRICE ------|------ リンゴ | 1000 ------|------ オレンジ | 200 ------|------ ブドウ | 1300 ------|------ という二つのテーブルA、Bがあったとします。 このA,Bの二つのテーブルのそれぞれの果物のPRAICEを比較してBのPRICEがアップしている果物を出力するという SQLを教えてください。 <ほしい結果> NAME | PRICE ------|------ リンゴ | 1000 ------|------ ブドウ | 1300 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 表Aから表Bへのレコード追加 VB2005 SQLServer2005
表Aに表Bのデータを追加したいのですが。 例えば、以下のようなテーブルがあったとして。 表A (A,B,C,Dとは項目名のこと) A B C D 表B A B C D E F G 表Aに表Bの項目A,B,C,Dのレコードが追加されればいいのですが。 現在は、コードの中にInsert文を書いてレコードの追加をやっているのですが。 テーブルの項目がたくさんある場合に困っています。 Accessだと追加クエリとかで簡単にできると聞いたのですが。 VB2005では簡単に表の追加はないでしょうか? アドバイスなどがいただけたら幸いです。 開発環境 SQL Server 2005 Express Visual Studio 2005 Pro WindowsXP Pro
- 締切済み
- Visual Basic
- SQL初心者のため、初歩的な質問だと思いますが、回答お願いします。
SQL初心者のため、初歩的な質問だと思いますが、回答お願いします。 ●健康診断テーブル ID 回数 結果 ――――――― A 1 11 B 1 22 B 2 23 C 1 11 C 2 22 C 3 12 D 1 12 E 1 31 ●個人情報テーブル ID 所属 ――――― A 経理 B 総務 C 営業 D 営業 E 経理 上のような二つのテーブルがあります。 IDは人物の識別に使うIDで、同じIDなら同じ人を表しています。 健康診断テーブルの結果は、回数を重ねると変わってしまうこともあります。 この二つのテーブルから、所属ごとの結果を表示したいです。 上記の場合、以下のようなデータを出力できるようにしたいです。 所属 結果 人数 ――――――――― 経理 11 1 経理 31 1 総務 23 1 営業 12 2 どのようにプログラムを組めばいいのでしょうか。 グーグル等で検索しても、自分の理解できる解答は見つかりませんでした。 (自分のプログラムレベルがかなり酷く、わからないがわからないのレベルです) 今は初回・2回・3回と回数を変更するSQL文は作成できています。 すいませんが、回答お願いします。
- ベストアンサー
- Oracle
- 複数の表の外部結合について
Oracle8iを使用して複数の表から特定のデータを抽出するSQL文を作っています。 【表A】 KaiinID | Name ----------------- 11111 | aaaaa ----------------- 22222 | bbbbb ----------------- 44444 | ddddd ----------------- 55555 | eeeee ----------------- 【表B】 KaiinID | Address ------------------- 11111 | address1 ------------------- 44444 | address4 ------------------- 66666 | address6 ------------------- 77777 | address7 ------------------- 【表C】 KaiinID | Memo ----------------- 11111 | Memo1 ----------------- 22222 | Memo2 ----------------- 33333 | Memo3 ----------------- 66666 | Memo6 ----------------- 【欲しい結果】 KaiinID -------- 44444 『A,B,Cの表のうちCのみに存在しないKaiinID』を検索するSQL文を実行したところ、以下のエラーが表示されてしまいました。 Select A.KaiinID From A,B,C Where A.KaiinID=B.KaiinID and A.KaiinID=C.KaiinID(+) and B.KaiinID=C.KaiinID(+); 「3行でエラーが発生しました。 ORA-01417:表が少なくとも1つの他の表に外部結合されている可能性があります。」 このエラーを見ても「外部結合されている可能性?確かにしてるけど・・・」 としかわかりません。 Select A.KaiinID From A,B Where A.KaiinID=B.KaiinID and A.KaiinID not in (Select KaiinID From C); ともしてみたのですが、こちらは実行した途端SQL*Plusが応答なしになってしまいました。 (実際の表にはA,B,Cそれぞれ300万件近いデータがあります) どのようにすれば、『3つの表のうち1つの表のみに存在しないKaiinID』を取得できるのでしょうか? 御存知の方、教えてください!
- ベストアンサー
- その他(データベース)
お礼
もとめていた情報を出すことができました。 本当にありがとうございました<_o_>