如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?
Posted
技术标签:
【中文标题】如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?【英文标题】:How to get values from one table column, concatenate them with a string and insert them in another table? 【发布时间】:2015-04-06 08:27:09 【问题描述】:如何:
从 table1.column1 中获取值(例如 abc)
table1.column1=abc
将它们与某些固定字符串连接,例如
xxx
yyy
zzz
将结果作为单独的行插入到 table2.column2 中。最终结果应该是具有如下值的行:
table2.column2=abc_xxx
table2.column2=abc_yyy
table2.column2=abc_zzz
(table2 有一个连接列指示 table2.column2 记录对应于哪个 ID,以防万一)
-
对 table1.column1 中 table1.item_id > 100 的所有记录重复此过程
编辑:为方便起见,我希望最终结果行序列看起来像:
source1_xxx
source1_yyy
source1_zzz
source2_xxx
source2_yyy
source2_zzz
不喜欢:
source1_xxx
source2_xxx
source1_yyy
source2_yyy
source1_zzz
source2_zzz
【问题讨论】:
您无法在一个查询中执行此操作。您要么需要在服务器端执行多个查询,要么使用事务。 可以使用多个查询。我只是不知道该怎么做。 什么是服务器端语言? 服务器是Percona (mysql)。 【参考方案1】:如果我理解正确,您希望表 1 中的每个现有行都有 N 个(例如 3 个)条目。如果是这样,您可以 CROSS JOIN Table1 到值的投影,如下所示:
INSERT INTO Table2(column2)
SELECT CONCAT(t1.column1, '_', x.col)
FROM Table1 t1
CROSS JOIN
(SELECT 'xxx' AS col
UNION
SELECT 'yyy'
UNION
SELECT 'zzz') x;
SqlFiddle here
编辑
查询已更新,以了解排序和过滤要求:
INSERT INTO Table2(column2)
SELECT CONCAT(t1.column1, '_', x.col)
FROM Table1 t1
CROSS JOIN
(SELECT 'xxx' AS col
UNION
SELECT 'yyy'
UNION
SELECT 'zzz') x
WHERE t1.ID > 100
ORDER BY t1.column1 ASC, x.col ASC;
With an updated SqlFiddle
【讨论】:
谢谢斯图尔特。你也可以看看编辑吗?我尝试了您的建议,但似乎给出了另一个序列,而不是我需要的序列:link MySql 允许您在插入期间按顺序排序,使用时将正确排序,例如带有 AUTO_INCREMENT 列。这个updated fiddle help? 这看起来更好:) 在服务器上尝试之前 - 你能告诉我如何修改它以便它只影响 table1.item_id>100? IE。我在哪里放置'where'条件。谢谢!WHERE
在FROM
之后和ORDER BY
之前。另一个Updated Fiddle
太棒了。请让我在服务器上尝试一下,我会回来确认这是答案:)【参考方案2】:
修改答案。
归功于 StuartLC ..他是对的,你需要使用交叉连接
INSERT INTO Table2(column2)
SELECT CONCAT(t1.column1, '_', x.col)
FROM Table1 t1
CROSS JOIN
(SELECT 'xxx' AS col
UNION
SELECT 'yyy'
UNION
SELECT 'zzz') x;
【讨论】:
我想这会在 table2 中创建一个行序列,例如:source1_xxx source2_xxx source1_yyy source2_yyy source1_zzz source2_zzz
为了方便起见,我希望行值像这样排序:source1_xxx source1_yyy source1_zzz source2_xxx source2_yyy source2_zzz
这可能吗?【参考方案3】:
这是你想要的吗
insert into table2(column2)
select concat(col1,'_','xxx') from table1
union
select concat(1col1,'_','yyy') from table1
union
select concat(col1,'_','zzz') from table1
否则将整个选择语句保留在视图中并在插入语句中使用它
create view abc
as
select concat(col1,'_','xxx') from table1
union
select concat(1col1,'_','yyy') from table1
union
select concat(col1,'_','zzz') from table1
然后
insert into table2(column2) select * from abc
【讨论】:
这不适用于 MySQL。你需要INSERT INTO...VALUES (1,2,3)(4,5,6)(7,8,9)
以上是关于如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?的主要内容,如果未能解决你的问题,请参考以下文章
Sql 从一个表列中选择一个最小值,并在一个 SQL 语句中将结果插入到另一个表列中
Pandas - 如何将属性保存到数组中并将它们的值保存到新列中