MySQL CTE语法结合INSERT INTO进行结果数据插入报错的问题
MySQL8 开始,支持公用表表达式 (CTE) 或 WITH 子句。生成的数据可以查询,但当生成的数据要插入另一张表时,和SQL SERVER语法有区别。那个大模型回答也有误,坚持在后面,但找了下资料后,确认MySQL的INSERT INTO要放到WITH AS前面。SQL SERVER 语法是在WITH AS 后面进行INSERT INTO。但如果在MySQL中,会报错。
·
MySQL8 开始,支持公用表表达式 (CTE) 或 WITH 子句。生成的数据可以查询,但当生成的数据要插入另一张表时,和SQL SERVER语法有区别
SQL SERVER 语法是在WITH AS 后面进行INSERT INTO
WITH
cte1 AS (SELECT ...), -- 第一个 CTE
cte2 AS (SELECT ...) -- 第二个 CTE(多个 CTE 用逗号分隔)
INSERT INTO target_table (column1, column2, ...)
SELECT
cte1.col,
cte2.col,
...
FROM cte1
JOIN cte2 ON ...; -- 可选:根据需求关联 CTE
但如果在MySQL中,会报错
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO xxx SELECT xxx FROM xxx' at line x
那个大模型回答也有误,坚持在后面,但找了下资料后,确认MySQL的INSERT INTO要放到WITH AS前面
INSERT INTO target_table (column1, column2, ...)
WITH
cte1 AS (SELECT ...), -- 第一个 CTE
cte2 AS (SELECT ...) -- 第二个 CTE(多个 CTE 用逗号分隔)
SELECT
cte1.col,
cte2.col,
...
FROM cte1
JOIN cte2 ON ...; -- 可选:根据需求关联 CTE
结果在时间差比较上,SQL SERVER和MYSQL区别:
SQLSERVER
DATEDIFF(ss, StartTime, EndTime)>=60
TIMESTAMPDIFF(SECOND, StartTime, EndTime)>=60
或
(EndTime-StartTime)>=60
参考:
https://www.modb.pro/db/527485
更多推荐


所有评论(0)