MySQL の列から行への変換のヒント (共有)

MySQL の列から行への変換のヒント (共有)

序文:

多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反する設計パターンが使用されているためです。つまり、複数の属性値が同じ列に格納されます (具体的な構造については下の表を参照)。

このモードでは、多くの場合、アプリケーションは区切り文字に基づいて列を分割し、列から行への変換の結果を取得する必要があります。

表データ:

ID 価値
1 小さい、小さい、大きい
2 小、中
3 小さい、大きい

期待される結果:

ID 価値
1 小さい
1 小さい
1 大きい
2 小さい
2 中くらい
3 小さい
3 大きい

文章:

#処理するテーブル create table tbl_name (ID int, mSize varchar(100));
tbl_name に値 (1,'tiny,small,big') を挿入します。
tbl_name値に挿入します(2、'small、medium');
tbl_name値に挿入します(3、 'tiny、big');

#AutoIncrement テーブル for loop create table incre_table (AutoIncreID int);
incre_tableの値に挿入する(1)
incre_tableの値に挿入する(2)
incre_tableの値に挿入する(3)
a.ID、substring_index(substring_index(a.mSize、'、'、b.AutoIncreID)、'、'、-1) を選択します。 
から 
テーブル名
参加する
増分テーブル b
b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1) の場合
a.ID で並べ替えます。

原則分析:

この結合の最も基本的な原理は、デカルト積です。このようにしてサイクルが達成されます。

具体的な問題の分析は次のとおりです。

length(a.Size) - length(replace(a.mSize,',',''))+1 は、カンマ区切り後の列内の値の数を示し、以下では n と表記します。

参加プロセスの疑似コード:

IDによるループ

{

判定: i <= n かどうか

{

i番目のコンマに最も近いデータを取得します。つまり、substring_index(substring_index(a.mSize,',',b.ID),',',-1)

私 = 私 +1

}

ID = ID +1

}

要約:

このアプローチの欠点は、連続した列を持つ別のテーブル (ここでは increase_table) が必要になることです。また、連続シーケンスの最大値は、セグメンテーション要件を満たす値の数よりも大きくなければなりません。

たとえば、mSize に 100 個のカンマ区切り値が含まれる行がある場合、increase_table には少なくとも 100 個の連続した行が必要です。

もちろん、MySQL には連続した番号の既成リストも用意されています。たとえば、mysql.help_topic: help_topic_id には合計 504 個の値があり、通常はほとんどのニーズを満たすことができます。

書き直すと次のようになります。

a.ID、substring_index(substring_index(a.mSize、'、'、b.help_topic_id+1)、'、'、-1) を選択 
から 
テーブル名
参加する
mysql.help_topic b
b.help_topic_id について < (length(a.mSize) - length(replace(a.mSize,',',''))+1)
a.ID で並べ替えます。

上記のMySQLの列から行への変換のヒント(共有)は、編集者があなたと共有するすべてのコンテンツです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLでカンマ区切り値の列を列に変換する方法
  • 複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明
  • 列の隣接する2つの行の差を計算するMySQLメソッド
  • MySQLで行または列をソートする方法
  • MySQL の列から行への変換、フィールドの結合方法 (必読)
  • MySQL の列から行への変換と年月グループ化の例
  • MySQL で行を列に変換したり、列を行に変換したりする詳細な例
  • mysql の行と列の動的変換の実装 (分割表、クロス表)
  • 行と列の変換のデータベース実装 (mysql の例)
  • MySQLで行を列に変換する方法

<<:  Selenium+testng を使用して Docker で Web 自動化を実現する方法

>>:  シンプルな画像ドラッグ効果を実現する js

推薦する

MacOS に MySQL 8.0 をインストールして MySQL にログインする方法

公式チュートリアルに従って、インストール パッケージをダウンロードし、[インストール] をクリックし...

AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例

序文最近、仕事でAES_ENCRYPT()関数を使用してプレーンテキストを暗号化し、MySQL に保...

ウェブページのメモリとCPU使用量を削減する方法

<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...

MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の追加、削除、変更、クエリステートメント1. 練習シートを作成するここでの練習表は3つの...

JavaScript オブジェクト (詳細)

目次JavaScript オブジェクト1. 定義2. オブジェクトの分類3. オブジェクトを定義する...

Html/Css (初心者が最初に読むべきガイド)

1. Web標準の意味を理解する - なぜWeb標準を採用するのか***** コンテンツとスタイル...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

MySQL 8.0.13 のインストールと設定方法を皆さんと共有したいと思います。お役に立てれば幸...

CentOS8.1 で Gitlab サーバーを構築するための詳細なチュートリアル

Gitlab と Github の違いについては、あまり説明する必要はありません。一言でまとめると、...

Vue で Alibaba のアイコンフォント ベクター アイコンを使用する方法について

インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

フロントエンド プロジェクトのデフォルトのスクロール バー スタイルを変更する (概要)

スクロールバーのデフォルトスタイルを変更する必要があるプロジェクトを多数作成しましたが、プラグインを...

IE、Firefox、Chromeブラウザではスペースの表示が異なります

&nbsp;&nbsp;IE、Firefox、Chrome ブラウザでの表示効果は、...

Linux のバックグラウンドで実行するいくつかの方法 (まとめ)

1. ノーフープハングアップ信号を無視してプログラムを実行する追加メモnohup コマンドは、ハン...

Dockerコンテナ間のホスト間通信 - オーバーレイベースの実装方法

オーバーレイネットワーク分析組み込みのホスト間ネットワーク通信は、常に Docker の待望の機能で...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...