mysql - 将数据复制到同一表中,某些列的值不同

标签 mysql sql

我知道我可以将行复制到同一个表中,同时为需要包含不同值的列指定不同的值,方法是在查询中实际写入所有列名称,如下所示:

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/

相关文章:

mysql - 获取每组分组结果的前n条记录

mysql - 如何使用 INSERT INTO 查询一次插入多行

mysql - 如何在 Mac OS Lion 上从命令行启动 MySQL 服务器?

php - 使用 PHP 和 UUID 跟踪动态网页状态

php - 从数据库收到的错误是 #1064 - PHP 和 MySQL

php - 为什么我的 MySQL 查询在 PHP 条件检查之前执行?

sql - 使用GoLang包“database/sql”时,是否可以使用通用类型变量检索查询结果

sql - <column> 在两个表之间的列比较中不明确

sql - 如何在 SSIS 包中设置变量?

sql - 如何添加代码初始化sql数据库