MySQL で複数のフィールドを連結する詳細な例

MySQL で複数のフィールドを連結する詳細な例

MySQL クエリ結果の行フィールドの結合は、次の 2 つの関数を使用して実装できます。

1. concat関数

mysql> テストから concat('1','2','3') を選択します。
+---------------------+
| 連結('1','2','3') |
+---------------------+
| 123 |
+---------------------+

接続文字列に NULL が含まれている場合、返される結果は NULL になります。

mysql> テストから concat('1','2',NULL,'3') を選択します。
+--------------------------+
| 連結('1','2',NULL,'3') |
+--------------------------+
| NULL |
+--------------------------+

2. concat_ws関数

concat(separator,str1,str2,...) はセパレータによる連結を表し、concat() の特殊な形式です。最初のパラメータは他のパラメータの区切り文字です。区切り文字は、連結される 2 つの文字列の間に配置されます。区切り文字には文字列または他のパラメータを使用できます。

mysql> テストから concat_ws(':','1','2','3') を選択します。
+----------------------------+
| 連結ws(':','1','2','3') |
+----------------------------+
| 1:2:3 |
+----------------------------+

区切り文字が NULL の場合、戻り値は NULL になります。

mysql> テストから concat_ws(NULL,'1','2','3') を選択します。 
+-----------------------------+
| 連結ws(NULL,'1','2','3') |
+-----------------------------+
| NULL | 
+-----------------------------+

パラメータに NULL が含まれている場合は無視されます。

mysql> テストから concat_ws(':','1','2',NULL,NULL,NULL,'3') を選択します。
+------------------------------------------+
| 連結ws(':','1','2',NULL,NULL,NULL,'3') |
+------------------------------------------+
| 1:2:3 |
+------------------------------------------+

NULL を判断して他の値に置き換えることができます。

mysql> 銀行制限 1 から concat_ws(':','1','2',ifNULL(NULL,'0'),'3') を選択します。 
+---------------------------------------------+
| concat_ws(':','1','2',ifNULL(NULL,'0'),'3') |
+---------------------------------------------+
| 1:2:0:3 | 
+---------------------------------------------+

補足:補足:MySQLでグループ化する場合、フィールドの値を連結する

t_dog テーブル

t_ワクチン表

t_dog_vaccine テーブル

問題の説明

dog_vaccine 内の各犬に対応するワクチンを照会する必要があります。犬とワクチンの間には多対多の関係があるため、1 匹の犬が複数のワクチンに対応する可能性がありますが、文字列を使用してこれらの複数のワクチンを 1 つに連結し、Java エンティティ クラスにマップしたいと考えています。

段階的に解決する

2 つの左結合クエリを使用して、3 つのテーブル t_dog、t_vaccine、t_dog_vaccine を関連付けました。

IDとしてdv.idを選択し、
 d.dog_name を dogName、v.vaccine_name として 
 から 
 t_犬_ワクチン dv
  t_dog d を dv.dog_id = d.id に左結合します
  t_vaccine v を dv.vaccine_id = v.id に左結合します

これは犬とワクチンが一致していますが、犬ごとに複数のレコードがあり、犬の名前と複数のvaccin_namesの値を文字列に結合したデータのみが必要です。考えてみたところ、ふとgroup byを思いつきました。

IDとしてdv.idを選択し、
 d.dog_name を dogName、v.vaccine_name として 
 から 
 t_犬_ワクチン dv
  t_dog d を dv.dog_id = d.id に左結合します
  t_vaccine v を dv.vaccine_id = v.id に左結合します 
  dogName でグループ化

group by を使用すると、当然期待した結果にはなりません。dogName は 1 つしかありませんが、それに対応するワクチンも 1 つしかありません。ワクチン名を複数にしたいのですが、どうすればよいでしょうか。 文字列連結を行える関数はありますか?うーん、わかりました、group_concat。 。 。

IDとしてdv.idを選択し、
 d.dog_name を dogName として、
 group_concat(v.vaccine_name) を dogVaccineName として  
 から 
 t_犬_ワクチン dv
  t_dog d を dv.dog_id = d.id に左結合します
  t_vaccine v を dv.vaccine_id = v.id に左結合します 
 d.dog_name でグループ化

これにより、望んでいた効果が達成されました。

group_concat の使用法

デフォルトの使用法

t_vaccine から dogVaccineName として group_concat(vaccine_name) を選択します。id は (t_dog_vaccine から vaccine_id を選択します。dog_id = 1)

group_concat のデフォルトの区切り文字は ',' です。この区切り文字を変更したい場合は、変更できます。

REPLACE(group_concat(vaccine_name),',','変更したい区切り文字をここに入力してください')

たとえば、デフォルトを次のように変更します。

t_vaccine から dogVaccineName として REPLACE(group_concat(vaccine_name),',',';') を選択します。ID は (t_dog_vaccine から vaccine_id を選択します。dog_id = 1)

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQLクエリ時にフィールドにデフォルト値を割り当てる方法
  • MySQL コマンドラインでテーブルにフィールドを追加します (フィールド名、空かどうか、デフォルト値)
  • MySQL テーブル フィールドのデフォルト値の設定 (グラフィック チュートリアルと詳細に注意)
  • MySQL 8.0の新機能、隠しフィールドの詳細な説明
  • MySQLのどのフィールドがインデックスに適しているかについての簡単な説明
  • mysql 更新ケース更新フィールド値が固定されていない操作
  • MySQLでレコードを変更する場合、更新操作フィールド = フィールド + 文字列
  • MySQL で単一のフィールド内の複数の値を分割および結合する方法
  • 複数のフィールドを変更するためのMysql更新の構文の詳細な分析
  • MySQLフィールドのデフォルト値を設定する方法

<<:  css n番目から始まるすべての要素を取得する

>>:  Nginxの書き換えモジュールの詳細な説明

推薦する

MySQL インデックス プッシュダウンの詳細

目次1. 左端接頭辞原則2. 表に戻る3. インデックスプッシュダウン序文:インデックス プッシュダ...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

高性能ウェブサイトの最適化ガイド

パフォーマンスの黄金律:エンドユーザーの応答時間のわずか 10% ~ 20% が HTML ドキュメ...

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...

webpackの遅延読み込みとプリロードの詳細な説明

目次通常の読み込み遅延読み込みプリロードプリロードを使用しないプリロードの使用要約する通常の読み込み...

Vue+echarts でプログレスバーのヒストグラムを実現

この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...

DockerにMinIOをインストールするための詳細な手順

目次1. docker環境が正常かどうかを確認する2. miniIOイメージをダウンロードする3. ...

SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

1. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...

JavaScript のクロージャの詳細な説明

導入クロージャは JavaScript の非常に強力な機能です。いわゆるクロージャは関数内の関数です...

Linux 最速のテキスト検索ツール ripgrep (grep の最良の代替)

序文テキスト検索ツールといえば、Linux で最も便利でよく使われるツールの 1 つである grep...

HTML doctype の役割の紹介

ドキュメント モードには次の 2 つの機能があります。 1. HTML文書を解析するためにどのHTM...

Linux で大きなファイルの内容を消去または削除する 5 つの方法

Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

両側にCSS固定レイアウト、中央に適応レイアウトを実装

フローティング、フローティング埋め込み div、配置、フレックスという 4 つの一般的な方法と原則を...