【问题标题】:MySQL INSERT with SELECT UNION gives syntax errorMySQL INSERT with SELECT UNION 给出语法错误
【发布时间】:2019-03-04 23:59:59
【问题描述】:

假设我有一个表 SomeTable 和一个 INT 列。

这个查询工作正常:

INSERT INTO SomeTable
(SELECT 1 WHERE true) 
UNION
(SELECT 2 FROM SomeTable WHERE true) 

但这会产生语法错误:

INSERT INTO SomeTable
(SELECT 1 WHERE true) 
UNION
(SELECT 2 WHERE true) 

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“WHERE true)”附近使用正确的语法

错误的原因是什么?

我如何使用WHERE 过滤器插入多行?

【问题讨论】:

  • 去掉括号。
  • @jarlh 在 MySQL 中使用带有 UNION 的括号是允许的,对吗?至少如果您重新格式化查询,请参阅this
  • 当您寻求错误帮助时,您应该包含确切的错误消息。
  • 你想完成什么?
  • @GordonLinoff 避免根据某些条件插入某些行(此处简化为true)。

标签: mysql sql sql-insert insert-into


【解决方案1】:

删除括号和你没有 FROM 子句的 where 子句,所以你的 where 不适用

INSERT INTO SomeTable
SELECT 1 
UNION
SELECT 2 

或者如果你想要一个 where 条件,你可以从双重使用

SELECT 1 from dual WHERE true
union 
SELECT 2 from  dual  WHERE true

【讨论】:

  • 为什么第一个查询有效?对于第一个 SELECT 语句,它有 WHERE 而没有 FROM
  • 我尝试了您的第一个查询,但不起作用..可能是您在本地发布了一些问题,或者只执行了您从第一个查询中的某个表中获得的第二部分,这可以恢复联合..在第二个不是..
  • 两个查询都指向同一个表(只有一列)。
  • 插入表不算数.. 错误在选择中.. 没有 from 和 where 的选择不起作用
  • 答案已更新 .. 为有效的 where 条件(使用 FROM dual)
【解决方案2】:

您的括号导致了问题。 :

INSERT INTO SomeTable (col)
     SELECT 1 
     FROM . . 
     WHERE . . .
     UNION
     SELECT 2 
     FROM SomeTable 
     WHERE . . . ;

【讨论】:

  • 为什么第一个查询有效?即使删除了括号,第二个查询也会失败(没有FROM)。
猜你喜欢
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多