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

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

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

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

Q&A

2回答

2923閲覧

テーブル結合で親テーブルから複数の値を持ってきたい

Biginner_A

総合スコア7

MySQL

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

0グッド

0クリップ

投稿2020/02/19 14:25

編集2020/02/19 14:41

MySQLについての質問になります

topicsテーブルを取得するときに結合してcategoriesテーブルのnameを取得したいのですが記述するSQL文が分からず躓いています。
もしよろしければ取得方法を教えていただければと思います。よろしくお願い致します

SELECT * FROM topics INNER JOIN categories ON topics.categoryId1 = categories.id;

categoryId1のみなら上記の文で取得可能でしたがcategoryId2, categoryId3に紐付くnameを取得できません。。

一応↓のように試してみました、もしかしたら構文がぐちゃぐちゃかもしれないのですが大目に見ていただけると...

SELECT * FROM topics INNER JOIN categories ON topics.categoryId1 = categories.id AND topics.categoryId2 = categories.id AND topics.categoryId3 = categories.id;

親テーブル(categoriesテーブル)

idname
1AAA
2BBB
3CCC

子テーブル(topicsテーブル)

idnamecategoryId1categoryId2categoryId3
1test123

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

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

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

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

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

m.ts10806

2020/02/19 14:28

「SQL」とひとえにいっても方言がありますから、想定するDBをタグに追加し、バージョンを質問本文に追記してください。
Orlofsky

2020/02/19 14:38

子テーブル(topicsテーブル)に categoryId2 が2つあります。
Orlofsky

2020/02/19 14:38

category が4個以上に増えたらどうしますか?
Orlofsky

2020/02/19 14:39

テーブル定義はCREATE TABLEに、テーブル中のデータはINSERTに訂正できたほうが的確なコメントが付き易いです。
Biginner_A

2020/02/19 14:41

すみません ひとつcategoryId3に修正しました
takasima20

2020/02/19 15:24

テーブルそのままやるんだったら、アプリ側でなんとかするしかないのでは?
guest

回答2

0

こんな感じで

SQL

1SELECT topics.* 2 , cate1.name as cate1_name 3 , cate2.name as cate2_name 4 , cate3.name as cate3_name 5FROM topics 6 left JOIN categories cate1 7 ON topics.categoryId1 = cate1.id 8 left JOIN categories cate2 9 ON topics.categoryId2 = cate2.id 10 left JOIN categories cate3 11 ON topics.categoryId3 = cate3.id

投稿2020/02/19 16:10

sazi

総合スコア25327

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

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

0

SQLをシンプルにパフォーマンス良く実行できるように、データベースのテーブルはデータベースの正規化 に沿って設計します。通常、第3正規化まで行います。第1正規化で繰り返しを排除します。

今回は子テーブルを正規化してください。

正規化を無視して破綻したシステムを数年に1度くらい見かけます。今のシステムは砂上の楼閣ですからテーブル設計からやり直すしかありません、と報告して終わり。
テーブル設計の最初から呼んでもらえたら何億円も浮いたのに。

投稿2020/02/19 14:53

Orlofsky

総合スコア16417

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問