
下記のようなテーブルがあるとします。
[table_a]
type,name1,name2
----------------
1,sato,keiko
2,ito,yoko
2,kishi,hruna
3,yasuda,fumi
上記テーブルに対して下のSQL文を発行すると
SELECT type, CONCAT( name1,name2 )
FROM table_a
実行結果
type,CONCAT( name1,'-',name2 )
------------------------------
1,sato-keiko
2,ito-yoko
2,kishi-hruna
3,yasuda-fumi
上記のような実行結果が得られるかと思います。
ですが、typeの値が重複したときに一行で出力したい場合は
どのようなSQL文を発行するのが良いのでしょうか?
得たい実行結果は下記となります。
実行結果
type,(連結された値)
------------------------------
1,sato-keiko
2,ito-yoko kishi-hruna ←typeの値が同じだったので一行に
3,yasuda-fumi
色々試してはみたのですが、なかなか解決できずにいます。
もしよろしければ、お力添えお願いします。
No.2ベストアンサー
- 回答日時:
chukenkenkouさん、ご回答ありがとうございます。
MySQLにこのような関数があることには気がつきませんでした。
なんとなく統計などに使いそうなイメージだったのですが値をつなぎ合わせるという意味で簡潔なアプローチができそうです。
この方向でSQL構文を書いてみようと思います。
No.3
- 回答日時:
#2は盲点でした。
たしかにそんな関数が追加になっていますね。
SELECT type,
GROUP_CONCAT(DISTINCT CONCAT( name1,'-',name2 )
SEPARATOR ' ')
FROM table_a
GROUP BY type;
yambejpさん、ご丁寧な回答ありがとうございます。
上記のSQL文で期待していた結果が得られました。
自分でもいろいろ調べたのですが、GROUP_CONCAT()は連結するカラムのなかに数値型あるとBlobで返すということもわかりました。
より汎用的数値やテキストを混合して使うときには、
SELECT type, SUBSTRING(GROUP_CONCAT(DISTINCT CONCAT(name1,'-',name2 ) SEPARATOR ' '),1)
FROM table_a
GROUP BY type;
と文字列として切り出してやることで表示できるようです。
今回はyambejpさんやchukenkenkouさんのおかげでとても勉強になりました。本当にありがとうございます。
No.1
- 回答日時:
ダブりの数の上限値がわかっているなら、その回数だけ
joinしてconcatすればいけそうな気がします。
無理やりやるなら変数をつかっても不可能ではないでしょう。
正直言うとこれってSQLの仕事じゃない気がします
出力の際にミドルウェアで処理してみては?
この回答への補足
yambejpさん、ご回答ありがとうございます。
もし、yambejpさんがSQL文だけで無理やり行うとしたら
どんな感じで構文を書かれますか?
参考にしてみたいのでもしよろしければ教授いただけないでしょうか。
yambejpさん、ご回答ありがとうございます。
現状、ダブりの上限は決まっているのですが今後増えることを想定すると
出力時結果をPHPなどで処理するのがいいとのこと理解いたしました。
スマートではないかもしれませんがSQL構文の勉強として変数を使う方法というのも自分なりに調べてみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQL INSERT文 エラー
-
一つ前に戻るには…
-
mysqlのデータベースを復元した...
-
「テーブルに座って……」という...
-
会社の飲み会の幹事になり、座...
-
処理の途中で停止させ、再開さ...
-
L2SWはARPテーブルを持っている?
-
javaでデータベース上のテーブ...
-
外部キーだけのテーブル(主キ...
-
SQL*LoaderでCSVから指定した列...
-
SELECT 文の NULL列は?
-
テーブルリンク リンク元を知...
-
IF NOT EXISTを使用するINSERT文
-
SQL、2つのテーブルで条件一致...
-
仕事のミス:本番データの削除→...
-
男性と2人で飲食店に行きテーブ...
-
Accessのインポートについて(上...
-
Oracleで上書きImportはできま...
-
件数とデータを同時に取得する...
-
UPDATE文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
1列について重複行を除いて全列...
-
PHP上のSQLで、SELECT文をいく...
-
最大値を持つレコードを削除したい
-
mysqlでJOIN文
-
列と列のあいだに、新しい列を...
-
mysqlのフィールド名
-
テーブル作成時のNULLの列につ...
-
mysqlのSQL文の書き方について...
-
複数のテーブルにまたがるDELETE
-
グループからランダムに抽出す...
-
データのバックアップ
-
MySQL INSERT文 エラー
-
UPDATEの書き方
-
テーブルの名前の付け方
-
テーブル名で検索して削除
-
他のDBにあるテーブル内容をcre...
-
副問い合わせの限界値はどれく...
-
3.23.59でのテンポラリテーブル...
-
mysqlの容量について
おすすめ情報