MySQL 错误" 'WITH' is not valid at this position for this server version expecting ALTER, ANALYZE, .



我知道这是旧版本MySQL Workbench的已知问题,但我确信我有最新版本,所以这绝对不是原因。代码如下,我还将解释为什么我使用这种方法。

WITH temp as
(
LOAD DATE INFILE 'File Location.csv'
IGNORE
INTO TABLE temp
FIELDS TERMINATED BY '^~'
LINES TERMINATED BY 'rn'
IGNORE 1 ROWS
(RUN_DATE, PROC-DT, STL_DT, TRD_DT, CHG_DT, SENT_ADP_DT, ACKN_ADP_DT, ORIG_PROC_DT)
)
select * from temp; 

因此,在之前的查询中,我将整个INFILE加载到我需要的表中,但特定字段(所有日期字段(中的这些字段没有正确填充。我正在尝试创建一个临时表,这样我就可以在这些字段上测试一些预处理逻辑(使用LOAD DATA的SET参数(,然后希望用适当的逻辑将这些列正确地注入到我的永久表中。然而,我不知道为什么我会犯这个错误。提前感谢您的帮助。

我有几个意见,没有特别的顺序:

  • 您无法使用LOAD DATA创建表。必须先创建表
  • 不能在CTE中运行LOAD DATA。CTE内部只能有一个SELECT
  • 你不需要CTE
  • "WITH"上的错误表明您没有使用支持CTE语法的MySQL版本
  • 语法支持取决于您的MySQL Server版本,而不是MySQL Workbench。Workbench只是一个客户端,它可以连接到任何版本的MySQL Server。尝试运行查询SELECT @@version;,它会告诉你连接到的MySQL Server的版本。如果它低于8.0版本,则不支持CTE语法

您应该创建表,然后加载数据,然后从中进行选择。

CREATE TEMPORARY TABLE temp ( ... );
LOAD DATE INFILE 'File Location.csv'
IGNORE
INTO TABLE temp
FIELDS TERMINATED BY '^~'
LINES TERMINATED BY 'rn'
IGNORE 1 ROWS
(RUN_DATE, PROC-DT, STL_DT, TRD_DT, CHG_DT, SENT_ADP_DT, ACKN_ADP_DT, ORIG_PROC_DT);
SELECT * FROM temp; 

与CTE不同,临时表将一直保留到客户端结束会话。然后,就像任何临时表一样,它将被自动删除。

相关内容