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

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

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Q&A

4回答

2177閲覧

複数テーブルの結合について

Clementine

総合スコア157

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

0グッド

0クリップ

投稿2017/06/28 10:29

表記の件につきまして質問します。

テーブル1(買い物かご)

iditem_codename
1a123りんご
2b123白菜
3c123みかん
4d123青葉
5e123メロン

上記、買い物かごテーブルを以下のマスタテーブルに結合してmakercodeを取得する事を目的としています

マスターテーブルは2つあり、マスタ1に無いデータは、マスタ2にありますが、マスタ2にあるデータはマスタ1にある場合があります。

テーブル2(マスタ1)
|id|item_code|name|makercode|subcode|
|:--|:--:|--:|--:|
|1|a123|りんご|aaa|aa1|
|2|b123|白菜|aaa|ds2|
|3|c123|みかん|bbb|ed3|
|4|d123|青葉|ccc|vf4|

テーブル2(マスタ2)
|id|item_code|name|makercode|label|
|:--|:--:|--:|--:|
|1|d123|青葉|ccc|wnsd|
|2|e123|メロン|ccc|asde|

この為、結合する際、買い物かごとマスタ1を結合させる際、マスタ1に結合できるデータが無い場合のみマスタ2のデータを結合するように考えております。

尚、マスタ1とマスタ2の合計データ数は10万件ほどになります。予めマスタ1とマスタ2のデータを結合する方法もございますが、ユニークなデータでなくなる為、マスタ同士を結合する場合はユニークにする点も考慮頂ければと思います。

この対応方法についてSQLクエリにてご教授頂けますよう質問いたします。

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

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

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

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

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

guest

回答4

0

unionでマスタ1とマスタ2の重複を排除してます。

SQL

1drop table if exists basket; 2drop table if exists master1; 3drop table if exists master2; 4 5create table basket(item_code varchar(20),name varchar(20)); 6insert into basket values 7('a123','りんご'), 8('b123','白菜'), 9('c123','みかん'), 10('d123','青葉'), 11('e123','メロン'); 12 13create table master1(item_code varchar(20),name varchar(20),makercode varchar(20),subcode varchar(20)); 14insert into master1 values 15('a123','りんご','aaa','aa1'), 16('b123','白菜','aaa','ds2'), 17('c123','みかん','bbb','ed3'), 18('d123','青葉','ccc','vf4'); 19 20create table master2(item_code varchar(20),name varchar(20),makercode varchar(20),lavel varchar(20)); 21insert into master2 values 22('d123','青葉','ccc','wnsd'), 23('e123','メロン','ccc','asde'); 24 25with master as ( 26select 27 item_code 28 ,name 29 ,makercode 30from 31 master1 32union 33select 34 item_code 35 ,name 36 ,makercode 37from 38 master2 39) 40select 41 b.* 42 ,m.makercode 43from 44 basket as b 45left join 46 master as m 47on 48 b.item_code = m.item_code;

投稿2020/06/02 08:51

FredericChopin

総合スコア3

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

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

0

UNION ALLでFULL JOINのまねをしてみました。

sql

1SELECT * FROM `買い物かご` t1 2JOIN ( 3 SELECT coalesce(m1.id,m2.id) id, coalesce(m1.item_code,m2.item_code) item_code, coalesce(m1.name,m2.name) name, 4 coalesce(m1.makercode,m2.makercode) makercode, coalesce(subcode,label) subcode 5 FROM 6 `マスタ1` AS m1 7 LEFT OUTER JOIN 8 `マスタ2` AS m2 ON m1.item_code = m2.item_code 9 UNION ALL 10 SELECT coalesce(m1.id,m2.id), coalesce(m1.item_code,m2.item_code), coalesce(m1.name,m2.name), 11 coalesce(m1.makercode,m2.makercode), coalesce(subcode,label) 12 FROM 13 `マスタ1` AS m1 14 RIGHT OUTER JOIN 15 `マスタ2` AS m2 ON m1.item_code = m2.item_code 16 WHERE 17 m1.item_code IS NULL 18) m3 19ON t1.item_code=m3.item_code 20; 21 22 23id item_code name id item_code name makercode subcode 244 d123 青葉 4 d123 青葉 ccc vf4 251 a123 りんご 1 a123 りんご aaa aa1 262 b123 白菜 2 b123 白菜 aaa ds2 273 c123 みかん 3 c123 みかん bbb ed3 285 e123 メロン 2 e123 メロン ccci asde 29

投稿2017/06/28 11:49

A.Ichi

総合スコア4070

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

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

0

こんな感じでしょうか?

SQL

1create table tbl1(id int,item_code varchar(20),name varchar(20)); 2insert into tbl1 values 3('1','a123','りんご'), 4(2,'b123','白菜'), 5(3,'c123','みかん'), 6(4,'d123','青葉'), 7(5,'e123','メロン'); 8 9create table tbl2(id int,item_code varchar(20),name varchar(20),makercode varchar(20),subcode varchar(20)); 10insert into tbl2 values 11(1,'a123','りんご','aaa','aa1'), 12(2,'b123','白菜','aaa','ds2'), 13(3,'c123','みかん','bbb','ed3'), 14(4,'d123','青葉','ccc','vf4'); 15 16create table tbl3(id int,item_code varchar(20),name varchar(20),makercode varchar(20),lavel varchar(20)); 17insert into tbl3 values 18(1,'d123','青葉','ccc','wnsd'), 19(2,'e123','メロン','ccc','asde'); 20 21select t1.id,t1.item_code,t1.name 22,coalesce(t2.makercode,t3.makercode) as makercode 23from tbl1 as t1 24left join tbl2 as t2 on t1.item_code=t2.item_code 25left join tbl3 as t3 on t1.item_code=t3.item_code 26

投稿2017/06/28 11:08

yambejp

総合スコア114736

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

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

0

マスタ1とマスタ2をLEFT JOINしてNULLにならないフィールドの方をIFで使う、っていうのでどうですか?

投稿2017/06/28 11:02

shi_ue

総合スコア4437

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問