Mariadb中同时使用with和insert ... values

Posted lxm-cnblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mariadb中同时使用with和insert ... values相关的知识,希望对你有一定的参考价值。

不能将with放在insert之前,否则会报以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'insert into table_name (id, name, ...) values ...\' at line xxx

正确做法是将with放在values之前:

  insert into test (name, type)
  with temp as (select type from test1 where id = 1)
  values
     (\'name1\', (select type from temp)),
     (\'name2\', (select type from temp))

MariaDB 存储过程 - 在 INSERT 语句中出现错误“缺少 SELECT”

【中文标题】MariaDB 存储过程 - 在 INSERT 语句中出现错误“缺少 SELECT”【英文标题】:MariaDB stored proc - Getting an error 'Missing SELECT' on INSERT statement 【发布时间】:2016-08-25 11:00:41 【问题描述】:

虽然我在 SQL Server 中创建了大量 proc,但我想开始使用 MariaDB,因此尝试在 MySQL Workbench 中创建下面的简单 proc。

我不断收到一条错误消息,指出表名后的开头 '(' 缺少 SELECT:

DELIMITER $$
drop procedure if exists usp_AddSentEmail$$
CREATE PROCEDURE usp_AddSentEmail (in pSender varchar(36)
    ,in pTo varchar(1000)
    ,in pSubject varchar(100)
    ,in pBody varchar(10000)
    ,in pRecordDT datetime)
BEGIN
    INSERT INTO Emails('To','Subject','Body','Sender','RecordDT','Sent','SentDT') 
        VALUES (pTo,pSubject,pBody,pSender,pRecordDT,1,pRecordDT);

END$$

DELIMITER ;

也许我尝试了错误的谷歌搜索,但出现的只是分隔符错误。

【问题讨论】:

请注意,列不是字符串。 【参考方案1】:

从插入查询中的列名中删除引号:

INSERT INTO Emails(To,Subject,Body,Sender,RecordDT,Sent,SentDT) 
    VALUES (pTo,pSubject,pBody,pSender,pRecordDT,1,pRecordDT);

【讨论】:

哈。你是天才:-) 谢谢。我不得不把 To 和 Subject 放在反引号中,但其余的都很好。

以上是关于Mariadb中同时使用with和insert ... values的主要内容,如果未能解决你的问题,请参考以下文章

我更新到 MariaDB 10.2.20 以使用 CTE。在 phpMyAdmin 中仍然出现“无法识别的语句类型。(靠近 WITH)

MariaDB 触发器在同一张表上执行 UPDATE 和 INSERT

MariaDB 列存储 LAST_INSERT_ID() 替代

HIVE中的insert和with as配合使用

SQL Server - 在 INSERT 语句中使用 WITH 子句

与 XAMPP 相比,MariaDB Docker 容器中的 INSERT SQL 查询非常慢