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

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

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

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

Q&A

解決済

1回答

335閲覧

MySQL : 複数テーブルにおけるデータ抽出

awaREMU

総合スコア1

MySQL

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

0グッド

0クリップ

投稿2022/11/20 13:08

編集2022/11/20 14:12

前提

MySQLで用意された複数のテーブルからデータを抽出したいです。

複数のテーブルを用いたクエリの実装で不安な点があります。

実現したいこと

テーブル:A

product_idproduct_namedate
0001aaaa20221120
0002bbbb20221119
0003cccc20221118

テーブル:B

customer_idcustomer_name
1000aaaa
2000bbbb
3000cccc

テーブル:C

c_idc_namegender
0001aaaa0
0002bbbb1
0003cccc1

実装内容としては、テーブルAとテーブルBをCROSS JOINしたものに、テーブルCを(C.c_id=A.product_id, C.c_name=B.customer_name)の条件でJOINしたい。

該当のソースコード

SELECT * FROM(SELECT * FROM A CROSS JOIN B) AS X JOIN C.c_id = X.product_id AND C.c_name = X.customer_name;

試したこと

こちらで自分が求めていることができているのかが分かりません。

CROSS JOINしたテーブル:Xと新たなテーブル:Cとでの条件付きJOINの方法を伺いたいです。

よろしくお願いいたします。

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

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

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

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

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

hoshi-takanori

2022/11/21 07:11 編集

ちょっとテーブル設計が謎です。A は商品テーブル、B は顧客テーブルだと思いますが、 ・A の date は何の日付でしょうか? その商品の発売開始日? ・商品名と顧客名のデータ (aaaa, bbbb, cccc) がかぶっていて紛らわしいので、どっちかを別の名前にした方がわかりやすいかと。 ・C は何のテーブルでしょうか? ・C の c_name で顧客テーブルを参照してますが、同姓同名の人がいる可能性があるので、customer_id を使うべきかと。 ・C の gender が顧客の性別ということなら、顧客テーブルに持たせた方がいいのでは。
guest

回答1

0

ベストアンサー

サブクエリにする必要を感じませんが?

SQL

1create table tbl_a(product_id int,product_name varchar(10),d date); 2insert into tbl_a values 3(1,'aaaa','20221120'), 4(2,'bbbb','20221119'), 5(3,'cccc','20221118'); 6 7create table tbl_b(insert_id int,customer_name varchar(10)); 8insert into tbl_b values 9(1000,'aaaa'), 10(2000,'bbbb'), 11(3000,'cccc'); 12 13create table tbl_c(c_id int,c_name varchar(10),gender int); 14insert into tbl_c values 15(1,'aaaa',0), 16(2,'bbbb',1), 17(3,'cccc',1); 18 19select * from tbl_a as t1 20cross join tbl_b as t2 21inner join tbl_c as t3 on t3.c_id = t1.product_id 22and t3.c_name = t2.customer_name

投稿2022/11/21 02:40

yambejp

総合スコア114863

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問