Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql将一行数据复制到多行中_Mysql_Sql - Fatal编程技术网

mysql将一行数据复制到多行中

mysql将一行数据复制到多行中,mysql,sql,Mysql,Sql,我有一张桌子,比如: PK FK Value1 value2 value3 1 1 3 2 5 2 2 5 3 6 4 1 9 null 5 我想要一个查询将所有行复制到结果表中,除了那些具有空值的行 导致: PK(above table) value(PK) 1 3 1 2 1 5 2

我有一张桌子,比如:

PK FK Value1  value2 value3
1   1    3      2      5
2   2    5      3      6
4   1    9      null   5
我想要一个查询将所有行复制到结果表中,除了那些具有空值的行

导致:

PK(above table) value(PK) 
1                  3    
1                  2    
1                  5
2                  5
2                  3
2                  6
4                  9 
4                  5

一种方法是将其作为三个插入来执行,如果需要操作的原子性,则由事务控制:

begin
insert into newtable (pk, value) select pk, value1 from oldtable
    where value1 is not null
insert into newtable (pk, value) select pk, value2 from oldtable
    where value2 is not null
insert into newtable (pk, value) select pk, value3 from oldtable
    where value3 is not null
commit
当然,这是假设新表上的主键穿过两列(我怀疑是因为第二列也有
pk
)。如果它只是在
pk
上,那么解决方案将无法工作,因为您将遇到主键约束冲突

您也可以作为一个工会来做:

insert into newtable (pk, value)
    select pk, value1 from oldtable where value1 is not null
    union select pk, value2 from oldtable where value2 is not null
    union select pk, value3 from oldtable where value3 is not null

一种方法是将其作为三个插入来执行,如果需要操作的原子性,则由事务控制:

begin
insert into newtable (pk, value) select pk, value1 from oldtable
    where value1 is not null
insert into newtable (pk, value) select pk, value2 from oldtable
    where value2 is not null
insert into newtable (pk, value) select pk, value3 from oldtable
    where value3 is not null
commit
当然,这是假设新表上的主键穿过两列(我怀疑是因为第二列也有
pk
)。如果它只是在
pk
上,那么解决方案将无法工作,因为您将遇到主键约束冲突

您也可以作为一个工会来做:

insert into newtable (pk, value)
    select pk, value1 from oldtable where value1 is not null
    union select pk, value2 from oldtable where value2 is not null
    union select pk, value3 from oldtable where value3 is not null

您可以通过以下查询实现此目的

INSERT INTO TABLE2 (SELECT ID,VALUE1 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE2 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE3 from table1);
如果需要单个查询,则可以使用

INSERT INTO TABLE2 (SELECT ID,COLUMN1 FROM table1 UNION SELECT ID,COLUMN2 FROM table1 UNION SELECT ID,COLUMN3 from table1)

您可以通过以下查询实现此目的

INSERT INTO TABLE2 (SELECT ID,VALUE1 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE2 FROM table1);
INSERT INTO TABLE2 (SELECT ID,VALUE3 from table1);
如果需要单个查询,则可以使用

INSERT INTO TABLE2 (SELECT ID,COLUMN1 FROM table1 UNION SELECT ID,COLUMN2 FROM table1 UNION SELECT ID,COLUMN3 from table1)

若要避免事务或说多个查询,我们可以使用UNION。感谢您的解决方案,第一个表值为null(value1、value2或3),然后我想跳过插入。若要避免事务或说多个查询,我们可以使用UNION。感谢您的解决方案,第一个表值为null(value1、value2或3),然后我想跳过插入。