<noscript id="eassg"><table id="eassg"></table></noscript>
  • <strike id="eassg"><s id="eassg"></s></strike>
  • <ul id="eassg"></ul>
    注冊|登錄

    聯系電話:024-31891684  13390130939
    沈陽軟件公司--沈陽軟件定制

    沈陽軟件開發_沈陽軟件公司_沈陽軟件定制/軟件/最新技術

    Latest technology最新技術

    MySQL逗號分割字段的行列轉換技巧

    瀏覽量:2498

    CRM定制請找易勢科技

    表數據:

     

    ID 

    Value

    1

    tiny,small,big

    2

    small,medium

    3

    tiny,big

    期望得到結果:

     

    ID

    Value

    1

    tiny

    1

    small

    1

    big

    2

    small

    2

    medium

    3

    tiny

    3

    big

    正文:

     

    #需要處理的表

    createtable tbl_name (ID int ,mSize varchar(100));

    insertinto tbl_name values (1,'tiny,small,big');

    insertinto tbl_name values (2,'small,medium');

    insertinto tbl_name values (3,'tiny,big');

     

    #用于循環的自增表

    createtable incre_table (AutoIncreID int);

    insertinto incre_table values (1);

    insertinto incre_table values (2);

    insertinto incre_table values (3);

     

     

    selecta.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1)

    from

    tbl_name a

    join

    incre_table b

    onb.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1)

    orderby a.ID;

     

    原理分析:

    這個join最基本原理是笛卡爾積。通過這個方式來實現循環。

    以下是具體問題分析:

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

    join過程的偽代碼:

    根據ID進行循環

    {

    判斷:i 是否<= n

    {

    獲取最靠近第i 個逗號之前的數據,即substring_index(substring_index(a.mSize,',',b.ID),',',-1)

    i = i +1

    }

    ID = ID +1

    }

    總結:

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

    例如有一行的mSize 有100個逗號分割的值,那么我們的incre_table 就需要有至少100個連續行。

    當然,mysql內部也有現成的連續數列表可用。如mysql.help_topic:help_topic_id 共有504個數值,一般能滿足于大部分需求了。

    改寫后如下:

     

    selecta.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1)

    from

    tbl_name a

    join

    mysql.help_topic b

    onb.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)

    orderby a.ID;

    沈陽團購網|營口網站制作|沈陽軟件公司|軟件定制|網站建設|加盟易勢|提交問題

    日韩无套内射视频6| 久9视频这里只有精品8| 亚洲日韩一页精品发布| 亚洲?V无码乱码国产精品| 日韩免费无码视频一区二区三区| 亚洲国产精品精华液| 亚洲国产午夜精品理论片| 99久久99久久久99精品齐| 久久青草精品38国产免费| 亚洲中文字幕久久精品无码喷水 | 国产精品国产三级国产AⅤ| 亚洲欧美日韩综合久久久| 国产午夜久久精品| 国产精品亚洲综合网站| 日韩国产成人资源精品视频| 国产日产欧产精品精品浪潮| 亚洲啪AV永久无码精品放毛片| 久久AV无码精品人妻糸列| 亚洲精品国产成人| 久视频精品免费观看99| 91精品国产色综合久久不卡蜜| 99精品热线在线观看免费视频| 亚洲AV日韩精品久久久久久| 国产精品日本一区二区不卡视频 | 精品一区二区三区在线成人| 午夜精品美女写真福利| 日韩精品久久无码人妻中文字幕| 亚洲国产成人一区二区精品区| 国产精品女同一区二区| 国产精品视频一区二区三区四| 久久久国产精品网站| 久久这里只精品99re免费| 少妇人妻偷人精品无码视频新浪| 无码精品A∨在线观看| 久久这里只有精品18| 99aiav国产精品视频| 在线观看91精品国产入口| 91无码人妻精品一区二区三区L| 久久精品国产99国产精品导航 | 国内精品久久久久久久久蜜桃| 精品国产亚洲一区二区三区在线观看 |