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

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

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

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

SQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

9337閲覧

MySQLで一対多の関係のテーブルからjoinする際、複数行で取得するのを一行で取得したい。

LokiTick

総合スコア27

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/11/06 05:09

###前提・実現したい
以下のテーブルを利用します。

tb1

項目1項目2
1hoge
2fuga

tb2

項目1項目3
1a
1b
2c
2d

このようなテーブルを次のようにjoinします。
select 項目2,項目3 from tb1
inner join tb2 on tb1.項目1 = tb2.項目1;

このようにすると、

項目2項目3
hogea
hogeb
fugac
fugad

のように取得されると思いますが、これを

項目2項目3-1項目3-2
hogeab
fugacd

のようにしたいのです。
規則としては、項目2に対する、項目3の数は、変動しない(例だと1対2)
tb1における項目1はユニークです。

うまく伝えられてないので、わかりづらいと思いますが、ご回答お願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

必ずしもダブっている数が一緒だとは限らないのでご提示の方式は非現実的です
通常はgroup_concatで一つのカラムの中に表示します。

ただしダブリの数が常に一定だと保証されているのであれば、
どちらが優先して表示されるかランク付け処理をしてあげれば
命題のような処理も可能です。

投稿2017/11/06 05:13

yambejp

総合スコア114814

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

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

0

ちょっと遠のいた回答かもしれませんが、項目3が固定なのであれば、
泥臭いですが、項目3の値をcaseで0/1分類してsumするのはいかがですか。

SQL

1select 2 tb1.項目2, 3 sum(case when tb2.項目3='a' then 1 else 0 end) as Count_a, 4 sum(case when tb2.項目3='b' then 1 else 0 end) as Count_b 5from 6 tb1 7inner join 8 tb2 9on tb1.項目1 = tb2.項目1 10group by 11 tb1.項目2

投稿2017/11/08 08:10

akio221

総合スコア716

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

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

0

こんな感じかな。

GROUP_CONCATで項目1ごとの','区切りの文字列に集約し、結合後にsubstring_indexで1番目、2番目を取り出す。

SQL

1select 項目2 2 , substring_index(項目3,',',1) as 項目3-1 3 , substring_index(substring_index(項目3,',',2),',',-1) as 項目3-2 4from tb1 inner join ( 5 select 項目1, GROUP_CONCAT(distinct 項目3 order by 項目3) as 項目3 6 from tb2 7 group by 項目1 8 ) as tb2 on tb1.項目1 = tb2.項目1

投稿2017/11/06 05:35

編集2017/11/06 05:38
sazi

総合スコア25184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問