SQL SERVER2005のJOINについて困っている方へのアドバイス

このQ&Aのポイント
  • SQL SERVER2005のJOINの仕方で困っている方へ、テーブルAとテーブルBを結合させるSQL文の作成方法についてアドバイスをいたします。
  • テーブルAのKBNが1で、テーブルBのNENGETUが200811の条件の下、テーブルAのCD、NAME、KBNとテーブルBのDAY1、DAY2、DAY3~DAY31の情報を取得するSQL文を書きたい場合、LEFT OUTER JOINを使用することで結果を得ることができます。
  • ただし、テーブルAとテーブルBの結合において、CDの値が重複して出力される場合があるため、適切な結果を得るためには適切な結合条件を設定する必要があります。アドバイスをお願いいたします。
回答を見る
  • ベストアンサー

SQL SERVER2005のJOINについて

はじめて投稿させていただきます。 SQL SERVER2005のJOINの仕方で困っています。 どなたか、アドバイスをお願いできないでしょうか。 テーブルA CD NAME KBN 1 山田太郎 1 2 山田花子 1 3 山田次郎 2 4 山田五郎 1 テーブルB CD NENGETU DAY1 DAY2 DAY3 ~ DAY31 1 200811 ◎ ◎   1 200812 ◎ 3 200810 3 200811 ◎ 4 200811 ◎ 欲しい結果の条件と結果は テーブルAは、KBN = 1 のみ テーブルBは、NENGETU = 200811 但し、テーブルBには、テーブルAに存在しないCDもあります。 CD NAME KBN DAY1 DAY2 DAY3 ~ DAY31 1 山田太郎 1 ◎ ◎   2 山田花子 1 4 山田五郎 1  ◎ 以上の結果を取得したいSQLを書きたいのですが、 Select CD,NAME,KBN,DAY1,DAY2,DAY3~,DAY31 From テーブルA LEFT OUTER JOIN テーブルB On テーブルA.CD = (Select テーブルB.CD From テーブルB Where テーブルB.NENGETU = 200811) Where テーブルA.KBN = '1' Order By テーブルA.CD とかでやると、CDの1が複数出たりして おかしい結果になってしまいます。 どなたか、アドバイスをお願いできないでしょうか。

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

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

普通に考えると、以下のようになりおますが、どうでしょう? select A.CD,A.NAME,A.KUBUN,B.NENGETU,B.DAY1,B.DAY2 FROM A left outer JOIN (SELECT B.CD,B.NENGETU,B.DAY1,B.DAY2 FROM B WHERE B.NENGETU = 200811) AS B ON A.CD = B.CD WHERE A.KUBUN = 1

BAISYS
質問者

お礼

です。だす。 期待通りの結果が出てきました。 ありがとうございました。

関連するQ&A

  • SQLの使用方法について(動的な結合条件の変更方法について)

    SQL Server2005を使用しています。 以下のような動作を実現したいのですが、どのようなSQLとなるのでしょうか? 以下のような構成のテーブルがあるとします。 テーブルA 分類1(PK) 分類2(PK) 名前 1     空文字   山田 1     1     山田太郎 1     2     山田花子 2     空文字   鈴木 テーブルB 番号(PK) 分類1 分類2 100  1   空文字 101  1   1 外部から受け取るパラメータはテーブルBの番号です。 次の番号を受け取った際に、以下の結果を取得したいのですが、 どのようなSQLとなるのでしょうか? 番号100 ↓ 山田 山田太郎 山田花子 番号101 ↓ 山田太郎 以下の様なSQLを作成して試してみたのですが、番号2をJOINの条件として指定しているため、 番号100の時に望む結果を得ることが出来ませんでした。 SELECT   * FROM   テーブルA AS A LEFT JOIN (   SELECT     *   FROM     テーブルB   WHERE     番号 = パラメータ ) AS B ON  A.分類1 = B.分類1 AND A.分類2 = B.分類2 サブクエリのB.分類2が空文字の場合は、JOINの条件から省くようなことは可能なのでしょうか?

  • SQLの問題です。

    以下のような二つのテーブルがあります。 社員テーブル 社員番号 社員氏名 1     花子 2     太郎 所属テーブル 社員番号 所属番号 1     10 1     20 2     30 欲しいのは以下の結果です。 1 花子 2 太郎 以下のSQLを実行すると、 SELECT distinct a.社員番号, a.社員氏名, b.所属番号 FROM 社員 a,所属 b where a.社員番号 = b.社員番号 order by 所属番号 1 花子 1 花子 2 太郎 となってしまいます。 先に述べたとおりの結果を取得するにはどういうSQLを書いたらいいでしょうか? お知恵を貸してください。宜しくお願いします。 Oracle8iを使用しています。   

  • 次の条件を満たす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 ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • LEFT JOINが2つあるSQL文でANDの意味

    ■下記SQL文の意味を教えてください SELECT a.*, b.being_name FROM alive a  LEFT JOIN being b ON a.hoge_id = b.id  LEFT JOIN call c ON c.call_id = a.hoge_id   AND f.hoge_id = 12  WHERE f.hoge_id = 12 OR b.id = 12 ※12の部分は動的に切り替わります ・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか? ・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか? >SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2 >「AND」は2つの条件式の論理積 ・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

    • ベストアンサー
    • MySQL
  • sqlのJoinでこんなこと出来ますか、

    sqlのJoinでこんなこと出来ますか、 当方初心者につき宜しく御願いします。 テーブルAにはIDがありIDはユニークです。テーブルBにはIDと項目がありIDは複数件存在します。項目には「あ」又は「い」、「う」、「え」、「を」が入っています。idに対して「あ」だけの時もあれば、「い」、と「う」が存在する時もあります。1件または複数件存在します。 条件に「あ」を抽出するようにして、「あ」がないときは存在するがテーブルBには存在するという結果を作りたいのです。 ID=1、あ ID=2、NULL という結果を作りたいのです。テーブルの双方に存在して、かつ「あ」であれば「あ」以外はNULLのレコードを作りたいのです。 説明が悪くて申し訳ありませんが宜しく御願い致します。

    • ベストアンサー
    • MySQL
  • 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を取得)

  • SQLの書き方

    テーブルA CODE NAME ------------- 0001 山田 0002  斎藤 0003 宮下 テーブルB CODE NAME ------------- 0002  斎藤 0004 加藤 上記のテーブA,Bから下のような結果を 返すSQL分を書きたいのですが何かよい方法はないでしょうか? (重複する行は一行として返したいです。) CODE NAME ------------- 0001 山田 0002  斎藤 0003 宮下 0004 加藤

  • SQLでテーブルのつなげ方がわからない(やや複雑)

    こんにちは VBAのADODB.Streamなのですが、SQLでテーブルをつなげる方法がわかりません。 どのようなSELECT文を書けば良いのか教えてください。 次のような2つのテーブルがあります。 Persons Relations Personsには、ID、人名、男性かどうか(夫かどうか)が並んでいます。 ID, pName, IsHusband 1, 鈴木太郎, True 2, 鈴木花子, False 3, 山田太郎, True 4, 斉藤花子, False 5, 斉藤太郎, True 6, 山田花子, False Relationsには、人物の婚姻関係が記されています。 ID, yourID, spouseID 1, 1, 2 2, 2, 1 3, 6, 3 4, 5, 4 5, 3, 6 6, 4, 5 (1つめのレコードは、yourID=1:鈴木太郎のspouseID(配偶者ID)=2:鈴木花子といった具合です。一番左のIDはこのテーブル以外で使っていません。) これを次のような表として取得したいと思っています。 1, 鈴木太郎, 2, 鈴木花子 3, 山田太郎, 6, 山田花子 5, 斉藤太郎, 4, 斉藤花子 今試行錯誤しているのですが、まずPersonsでIsHusbandがTrueの人を抜き出して、その人のIDを使ってRelationsからSouseIDを抜き出して・・・・で、それをやっぱりPersons内で検索・・・ とうかぜんぜんわかりません。できませんでした。 実際、Relationsの方は参照するだけで抽出しなくても良い(別にしても良いです)し、JOINするのが同じテーブル同士だし、よくわかりません。 どのように書けば良いか、教えてください。

  • 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  |青組|

  • postgresのouter join(?)について

    やまとです。 以下のようなテーブルと、そのデータが有ります。 a_table ============ id | a_name ---+---------- 1 | hanako 2 | taro b_table ============ id | b_name ---+---------- 1 | yamada select a_name,b_name from a_table a, b_table b where a.id = b.id 以上のようなselect文だと、以下の様に出ますが、 a_name | b_name -------+------- jo | koba 実際は、以下の様に結果を出したいのです。 a_name | b_name -------+------- jo | koba taro | ORACLEだと where a.id = b.id(+) で出ると思いますが、 Postgresではどのように表記したら良いのでしょうか? 教えてください。 宜しくお願いします。