Mysql序列列生成

Mysql序列列生成,mysql,Mysql,我需要一个关于基于其他列的值的列生成器的帮助。我有一张桌子如下 CREATE TABLE test1 ( `C1` INT, `C2` VARCHAR(120), `C3` VARCHAR(50), `C4` VARCHAR(20), `C5` VARCHAR(50) ); Insert into test1 (

我需要一个关于基于其他列的值的列生成器的帮助。我有一张桌子如下

CREATE TABLE test1
(
    `C1`              INT,
    `C2`             VARCHAR(120),
    `C3`                 VARCHAR(50),
    `C4`                VARCHAR(20),
    `C5`                 VARCHAR(50)
);

Insert into test1 (C1,C2,C3,C4,C5) values (1071,'TEST01','51','464',null);
Insert into test1 (C1,C2,C3,C4,C5) values (1071,'TEST02','9','109',null);
Insert into test1 (C1,C2,C3,C4,C5) values (970,'TEST03','1,2','454,41',null);
Insert into test1 (C1,C2,C3,C4,C5) values (950,'TEST04','1,2','253,255,254',null);
Insert into test1 (C1,C2,C3,C4,C5) values (792,'TEST05','1,2','536','57,65,66');
结果如下:

C1      C2      C3      C4              C5
1071    TEST01  51      464 
1071    TEST02  9       109 
970     TEST03  1,2     454,41  
950     TEST04  1,2     253,255,254 
792     TEST05  1,2     536             57,65,66
现在,select查询应该显示所有记录+其他列,如C3_NEW、C4_NEW和C5_NEW。这些新列基于C3、C4和C5的值

示例:如果C3有两个值,即1,2,C4有454,41 那么C3_NEW应该基于1和2创建, 新的C4_应基于454和41创建。因此,需要根据值添加行

下面是我想要的输出

C1      C2      C3      C4          C5          C3_NEW  C4_NEW  C5_NEW
1071    TEST02  9       109                     9       109 
1071    TEST01  51      464                     51      464 
970     TEST03  1,2     454,41                  1       41  
970     TEST03  1,2     454,41                  1       454 
970     TEST03  1,2     454,41                  2       41  
970     TEST03  1,2     454,41                  2       454 
950     TEST04  1,2     253,255,254             1       253 
950     TEST04  1,2     253,255,254             1       255 
950     TEST04  1,2     253,255,254             1       254 
950     TEST04  1,2     253,255,254             2       253 
950     TEST04  1,2     253,255,254             2       255 
950     TEST04  1,2     253,255,254             2       254 
792     TEST05  1,2     536         57,65,66    1       536     57
792     TEST05  1,2     536         57,65,66    1       536     65
792     TEST05  1,2     536         57,65,66    1       536     66
792     TEST05  1,2     536         57,65,66    2       536     57
792     TEST05  1,2     536         57,65,66    2       536     65
792     TEST05  1,2     536         57,65,66    2       536     66
在Oracle中,下面的查询提供了所需的最终输出:

Select
    C1, C2, C3, C4, C5,
    decode(C3_NEW, 'NONE', NULL, C3_NEW)  C3_NEW,
    C4_NEW,
    regexp_substr(sp_pub_sub.C5,'[^,]+',1,column_value) C5_NEW
from
    (Select C1, C2, C3, C4, C5, C3_NEW,regexp_substr(sp_C3.C4,'[^,]+',1,column_value) C4_NEW
     from
     (select  C1, C2, C3, C4, C5, regexp_substr(C3,'[^,]+',1,column_value) C3_NEW 
     from  (select C1, C2, replace(C5, ' or ',',') as C5, replace(C3, ' or ',',') as C3, replace(C4, ' or ',',') as C4 from test1) t
            ,table(cast(multiset(select level from dual connect by level <= 1+length(C3) - length(replace(C3,',')) ) as sys.OdciNumberList)) ) sp_C3
            ,table(cast(multiset(select level from dual connect by level <= 1+length(sp_C3.C4) - length(replace(sp_C3.C4,',')) ) as sys.OdciNumberList)) ) sp_pub_sub
            ,table(cast(multiset(select level from dual connect by level <= 1+length(sp_pub_sub.C5) - length(replace(sp_pub_sub.C5,',')) ) as sys.OdciNumberList))
 order by 1 desc,2,3,4,5,6;
现在,mysql没有multiset或level,那么如何在mysql中获得相同的输出呢。请对我宽容一点,因为我不是开发人员:-


提前感谢

你有主键吗?请看Thanke@草莓,没有,它没有主键。我看到了链接,但不确定该从中获取什么。如果它没有主键,那么它就不是真正的表,因此可以说超出了此标记的范围。如果您不确定从建议的链接中获取什么,那么我恐怕您已经用尽了我在这方面的知识-但也许其他人可以进一步建议。嗨,Starberry,我很抱歉,它确实有主键和外键约束,但在原始表中,而不是在我提供的示例中,这就是为什么我说它没有主键。我没有输入上面的查询,因为查询没有调用主键列。e、 在上面的g中,将有一个名为ID的新列,该列带有主键。