【问题标题】:Insert a String Constant into a table using Select inside Inert Statement使用 Inert 语句中的 Select 将字符串常量插入表中
【发布时间】:2015-03-25 02:13:18
【问题描述】:

我想将字符串常量与 select 语句的结果一起插入到表中。

Create table SignatureCount(tableName VARCHAR(100), signatures VARCHAR(20));
...
SET @s = CONCAT('INSERT INTO SignatureCount (tableName, signatures) Select count(distinct signature),', tableName ,' from ', tableName); 
PREPARE stmt1 FROM @s; 
EXECUTE stmt1; 

这里 tableName 是一个变量。

问题是 SQL 认为它的列名来自表的一个抱怨。但是我可以插入整数值,例如 1,2... 等等。

【问题讨论】:

    标签: mysql sql prepared-statement procedure


    【解决方案1】:

    你想要的终极 SQL 是这样的

    INSERT INTO SignatureCount(tableName, signatures)
        Select 'tablename', count(distinct signature),'
        from tableName;
    

    我认为这会生成它:

    SET @s = CONCAT('INSERT INTO SignatureCount(tableName, signatures) ',
                    'Select ''', tablename, ''', count(distinct signature) ',
                    'from ', tableName); 
    

    在这样的表达式中,你需要非常小心逗号和单引号。

    其实我经常用replace来解决这个问题:

    SET @s = REPLACE('INSERT INTO SignatureCount(tableName, signatures)
    SELECT ''@tablename'', count(distinct signature) from @tablename',
                     '@tablename', tableName);
    

    这样可以更容易地查看(和修复)查询的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      相关资源
      最近更新 更多