【问题标题】:Syntax Error near WHERE NOT EXISTWHERE NOT EXIST 附近的语法错误
【发布时间】:2017-07-22 08:25:51
【问题描述】:

我在堆栈中搜索,但没有一个达到最终答案。 我的查询是这样的:

插入用户(用户名、频率、自动发送) 值('feri2','3','1') WHERE NOT EXISTS (SELECT * FROM user WHERE username='feri2')

运行时,我收到语法解析错误:

SQLSTATE[42000]: Syntax error or access violation: 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 'WHERE NOT EXISTS ( SELECT * FROM user WHERE username='feri2')' at line 1 

不知道怎么解决,问题出在哪里?

【问题讨论】:

  • 除非您也有 SELECT,否则您不能将 WHERE 与 INSERT 一起使用
  • @GarrGodfrey 我在另一张桌子上做了它,它对我有用!

标签: mysql sql syntax


【解决方案1】:

你需要稍微改变一下语法,试试下面的:

INSERT INTO user (username,frequence,autoSend)
SELECT * FROM (SELECT 'feri2','3','1') AS `values`
WHERE NOT EXISTS (
    SELECT username FROM user WHERE username='feri2'
) LIMIT 1;

【讨论】:

  • 如果您尝试使用准备好的语句执行此操作,而您的列可能具有相同的值,请在子查询中为您的列名提供别名:SELECT * FROM (SELECT ? as col1, ? as col2, ? as col3) AS `values`
【解决方案2】:

如果您不希望重复用户,您可能应该在username 列上有一个唯一索引。如果你添加它,那么你可以简单地:

INSERT IGNORE INTO user (username,frequence,autoSend) 
VALUES('feri2','3','1') 

如果已经有用户“feri2”,那么它什么也不做。

【讨论】:

  • 谢谢你的回答。那工作,但我不想使用 INSERT IGNORE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2020-03-15
  • 2012-12-04
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多