質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

629閲覧

SQL 結合して思うような結果が取得できません。。。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/05/10 12:46

テーブル構造は以下の通りです。
brandとcodeがPKとなっています。
tableA

brandcode
11200
11201
11202
21200
21201
21202

tableB

brandcodename
11201A
21202B

sql

1select ta.brand,ta.code,tb.name from tableA as ta 2join tableB as tb on ta.brand = tb.brand

上記のSQLを実行して以下の結果になってしまいました。

brandcodename
11200A
11201A
11202A
21200B
21201B
21202B

結合した結果ではtableBのnameに入力されている
レコード以外はnullにしたいのですが、
同じbrandのnameにすべて入ってしまいました。

以下のような結果を出すにはどのように書けばよろしいでしょうか?
よろしくお願いします。

brandcodename
11200null
11201A
11202null
21200null
21201null
21202B

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

単純にcodeを利用していないからでは

SQL

1select ta.brand,ta.code,tb.name from tableA as ta 2left join tableB as tb on ta.brand = tb.brand and ta.code=tb.code 3order by ta.brand,ta.code

投稿2018/05/10 12:58

yambejp

総合スコア114505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/10 13:42

回答ありがとうございます。 ですがcodeを追加しても結果は変わりませんでした。
yambejp

2018/05/10 14:26

私はMySQL使いなのでSQL Serverの詳しい仕様はわからないのですが codeも利用してleft joinしているのにtb.nameがnullではない値が 参照されているということで間違いないですか?
guest

0

ベストアンサー

codeが文字型であれば、ひょっとして余分な空白が含まれているのかもしれません。

SQL

1select ta.brand, ta.code, tb.name 2from tableA as ta left join tableB as tb 3 on ta.brand=tb.brand 4 and cast(ta.code as integer)=cast(tb.code as integer) 5 6--または 7select ta.brand, ta.code, tb.name 8from tableA as ta left join tableB as tb 9 on ta.brand=tb.brand 10 and trim(ta.code)=trim(tb.code) 11

投稿2018/05/10 14:35

sazi

総合スコア25076

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/11 14:50

回答ありがとうございます。 codeが抜けていました。
guest

0

sql

1-- ★テーブル代わりのWITH句 2WITH 3tableA AS ( 4 SELECT 1 AS brand, 1200 AS code UNION ALL 5 SELECT 1 AS brand, 1201 AS code UNION ALL 6 SELECT 1 AS brand, 1202 AS code UNION ALL 7 SELECT 2 AS brand, 1200 AS code UNION ALL 8 SELECT 2 AS brand, 1201 AS code UNION ALL 9 SELECT 2 AS brand, 1202 AS code 10), 11tableB AS ( 12 SELECT 1 AS brand, 1201 AS code, 'A' AS name UNION ALL 13 SELECT 2 AS brand, 1202 AS code, 'B' AS name 14) 15 16-- ★SELECT ここから 17select 18 ta.brand 19, ta.code 20, tb.name 21from tableA as ta 22left join tableB as tb on ( 23 ta.brand = tb.brand and 24 ta.code = tb.code 25)
  • tableA と tableB の結合条件に code を追加
  • join tableBleft join tableB

でしょうか


あ、yambejp さんの回答まんまでしたね。
yambejp さんが書かれた SQL をコピペしても ↑ と同じ結果になりましたよ
自分で書いた時はなにか書き間違えてたのかもしれませんね?

投稿2018/05/11 01:25

編集2018/05/11 01:29
sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/11 14:49

詳しく回答ありがとうございます。 codeが条件から抜けていました。
guest

0

yambejpさんの回答で正しいですよ。

以下サイトで試してみてください。
http://sqlfiddle.com

SQL

1create table tableA ( 2 brand integer, 3 code integer, 4 primary key(brand, code) 5); 6 7insert into tableA values(1, 1200); 8insert into tableA values(1, 1201); 9insert into tableA values(1, 1202); 10insert into tableA values(2, 1200); 11insert into tableA values(2, 1201); 12insert into tableA values(2, 1202); 13 14create table tableB ( 15 brand integer, 16 code integer, 17 name text, 18 primary key(brand, code) 19); 20 21insert into tableB values(1, 1201, 'A'); 22insert into tableB values(2, 1202, 'B');
  1. データベースのプルダウンで「MS SQL Serve 2017」を選択する

  2. 左側の枠内に上記コードを貼り付けて、「Build Schema」ボタンを押す

  3. 右側の枠内にyambejpさんのコードを貼り付けて、「Run SQL」ボタンを押す

これで、求めていらっしゃるような結果が表示されます。
ご自分のテーブルに合わせてクエリを書く際に、何か書き間違われていると思います。

投稿2018/05/10 14:24

miyu21

総合スコア111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問