我知道我可以将行复制到同一个表中,同时通过在查询中实际写入所有列名来为需要包含不同值的列指定不同的值,如下所示:
INSERT INTO
my_table (col1, col2, col3, col4)
SELECT
col1,
col2,
[value_for_col_3],
col4
FROM
my_table;
[value_for_col_3] 是 col3 列所需的原始值。这样可以正常工作,但是在我的表包含很多列的情况下,编写所有列名称会很麻烦。有没有办法在不键入我的表的所有列名的情况下执行相同的操作(同时仍能为某些列指定不同的值)?
提前感谢您的帮助。
答案 0 :(得分:0)
在这个答案中,我给出了一个基本的大纲,而不是写出所有的代码,因为你正在寻找你想要的东西。这是一种可行的方法。
该方法是获取除您不想要的列之外的所有列的列表,然后在查询中使用这些列名的输出。
这显示了如何在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';
将被修改为插入到语句中。