我知道我可以将行复制到同一个表中,同时为需要包含不同值的列指定不同的值,方法是在查询中实际写入所有列名称,如下所示:
INSERT INTO
my_table (col1, col2, col3, col4)
SELECT
col1,
col2,
[value_for_col_3],
col4
FROM
my_table;
WHERE [value_for_col_3] 是我想要的列 col3 的原始值。这工作得很好,但如果我的表包含很多列,那么写下所有列名会很麻烦。有没有办法执行相同的操作,而无需键入表的所有列名(同时仍然能够为某些列指定不同的值)?
预先感谢您的帮助。
最佳答案
在这个答案中,我给出了一个基本大纲,而不是写出所有代码,因为您希望看看是否可以完成您想要的操作。这是一种可能的方法。
该方法是获取除不需要的列之外的所有列名称的列表,然后在查询中使用这些列名称的输出。
这展示了如何在 SQL Server 中选择除某些列之外的所有列,但我确信可以修改语法以在 MySQL 中使用。
(从此处的答案之一复制并粘贴以下代码:SQL exclude a column using SELECT * [except columnA] FROM tableA?)
declare @cols varchar(max), @query varchar(max);
SELECT @cols = STUFF
(
(
SELECT DISTINCT '], [' + name
FROM sys.columns
where object_id = (
select top 1 object_id from sys.objects
where name = 'MyTable'
)
and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
FOR XML PATH('')
), 1, 2, ''
) + ']';
SELECT @query = 'select ' + @cols + ' from MyTable where';
EXEC (@query);
只是 SELECT 语句,
SELECT @query = 'select ' + @cols + ' from MyTable where';
将修改为您的 insert into 语句。
关于mysql - 将数据复制到同一表中,某些列的值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106289/