亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql 列轉(zhuǎn)行的技巧(分享)

 更新時(shí)間:2017年03月25日 11:28:31   投稿:jingxian  
下面小編就為大家?guī)硪黄猰ysql 列轉(zhuǎn)行的技巧(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

前言:

由于很多業(yè)務(wù)表因?yàn)闅v史原因或者性能原因,都使用了違反第一范式的設(shè)計(jì)模式。即同一個(gè)列中存儲(chǔ)了多個(gè)屬性值(具體結(jié)構(gòu)見下表)。

這種模式下,應(yīng)用常常需要將這個(gè)列依據(jù)分隔符進(jìn)行分割,并得到列轉(zhuǎn)行的結(jié)果。

表數(shù)據(jù):

ID Value
1 tiny,small,big
2 small,medium
3 tiny,big

期望得到結(jié)果:

ID Value
1 tiny
1 small
1 big
2 small
2 medium
3 tiny
3 big

正文:

#需要處理的表
create table tbl_name (ID int ,mSize varchar(100));
insert into tbl_name values (1,'tiny,small,big');
insert into tbl_name values (2,'small,medium');
insert into tbl_name values (3,'tiny,big');

#用于循環(huán)的自增表
create table incre_table (AutoIncreID int);
insert into incre_table values (1);
insert into incre_table values (2);
insert into incre_table values (3);
select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1) 
from 
tbl_name a
join
incre_table b
on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1)
order by a.ID;

原理分析:

這個(gè)join最基本原理是笛卡爾積。通過這個(gè)方式來實(shí)現(xiàn)循環(huán)。

以下是具體問題分析:

length(a.Size) - length(replace(a.mSize,',',''))+1  表示了,按照逗號(hào)分割后,改列擁有的數(shù)值數(shù)量,下面簡(jiǎn)稱n

join過程的偽代碼:

根據(jù)ID進(jìn)行循環(huán)

{

判斷:i 是否 <= n

{

獲取最靠近第 i 個(gè)逗號(hào)之前的數(shù)據(jù), 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)

i = i +1

}

ID = ID +1

}

總結(jié):

這種方法的缺點(diǎn)在于,我們需要一個(gè)擁有連續(xù)數(shù)列的獨(dú)立表(這里是incre_table)。并且連續(xù)數(shù)列的最大值一定要大于符合分割的值的個(gè)數(shù)。

例如有一行的mSize 有100個(gè)逗號(hào)分割的值,那么我們的incre_table 就需要有至少100個(gè)連續(xù)行。

當(dāng)然,mysql內(nèi)部也有現(xiàn)成的連續(xù)數(shù)列表可用。如mysql.help_topic: help_topic_id 共有504個(gè)數(shù)值,一般能滿足于大部分需求了。

改寫后如下:

select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1) 
from 
tbl_name a
join
mysql.help_topic b
on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)
order by a.ID;

以上這篇mysql 列轉(zhuǎn)行的技巧(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL分頁(yè)分析原理及提高效率

    MySQL分頁(yè)分析原理及提高效率

    這篇文章主要介紹了MySQL分頁(yè)分析原理及提高效率的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • linux mysql5.6版本的安裝配置過程

    linux mysql5.6版本的安裝配置過程

    mysql官網(wǎng)開始發(fā)布相關(guān)的5.6系列的各個(gè)版本,對(duì)于mysql5.6系列的版本對(duì)一起的版本進(jìn)行了全局性的細(xì)節(jié)性加強(qiáng)
    2013-06-06
  • MySQL參數(shù)優(yōu)化信息參考(my.cnf參數(shù)優(yōu)化)

    MySQL參數(shù)優(yōu)化信息參考(my.cnf參數(shù)優(yōu)化)

    下面針對(duì)一些參數(shù)進(jìn)行說明,當(dāng)然還有其它的設(shè)置可以起作用,取決于你的負(fù)載或硬件:在慢內(nèi)存和快磁盤、高并發(fā)和寫密集型負(fù)載情況下,你將需要特殊的調(diào)整
    2024-07-07
  • mysql事務(wù)處理用法與實(shí)例代碼詳解

    mysql事務(wù)處理用法與實(shí)例代碼詳解

    這篇文章主要介紹了mysql事務(wù)處理用法與實(shí)例代碼詳解,詳細(xì)的介紹了事物的特性和用法并實(shí)現(xiàn)php和mysql事務(wù)處理例子,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-12-12
  • clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式

    clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式

    這篇文章主要介紹了clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL和Redis實(shí)現(xiàn)二級(jí)緩存的方法詳解

    MySQL和Redis實(shí)現(xiàn)二級(jí)緩存的方法詳解

    這篇文章主要給大家介紹了關(guān)于MySQL和Redis實(shí)現(xiàn)二級(jí)緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • MySQL亂碼問題終極指南

    MySQL亂碼問題終極指南

    為了讓大家盡量在工作中少受或者不受亂碼的困擾,這篇文章主要為大家分享了MySQL亂碼問題終極指南,感興趣的小伙伴們可以參考一下
    2016-04-04
  • DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤圖文解決方案

    DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤圖文解決方案

    這篇文章主要給大家介紹了關(guān)于DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤解決方案的相關(guān)資料,DBeaver是免費(fèi)、開源、通用數(shù)據(jù)庫(kù)工具,是許多開發(fā)開發(fā)人員和數(shù)據(jù)庫(kù)管理員的所選,需要的朋友可以參考下
    2023-11-11
  • MySQL索引失效的幾種情況小結(jié)

    MySQL索引失效的幾種情況小結(jié)

    本文主要介紹了MySQL索引失效的幾種情況小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql釋放表空間的方法示例

    mysql釋放表空間的方法示例

    本文主要介紹了mysql釋放表空間的方法示例,可以使用OPTIMIZE TABLE命令,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08

最新評(píng)論