【问题标题】:SQL Where Not Exists throws an error at 'Where' clauseSQL Where Not Exists 在“Where”子句中引发错误
【发布时间】:2016-01-09 17:53:29
【问题描述】:

如果该行尚不存在,我将尝试插入该行。我已经跟进了不同的教程,这就是我到目前为止所拥有的:

INSERT INTO UserTable (id,Email, userid) VALUES 
('"2424" + "','" + email + "','" + "4424"') 
WHERE NOT EXISTS (Select * 
                  from UserTable 
                  where userid='"4424" + "' AND Email='" + email + "')

如果表中已经不包含电子邮件变量和用户 ID“4424”,则基本上尝试插入上述行。这在“WHERE”子句中显示错误。

我做错了什么?

P.S:我应该对它们进行参数化,但这只是为了澄清查询

【问题讨论】:

  • 这取决于您使用的实际具体数据库系统 - 并非所有基于 SQL 的数据库产品都可能以相同的方式处理。

标签: c# sql sql-insert not-exists


【解决方案1】:

这是因为您不能将WHERE 子句与INSERT 语句一起使用。而是使用INSERT INTO ... SELECT FROM 构造类似

INSERT INTO UserTable (id,Email, userid) 
SELECT 2424, email, 4424 FROM tbl1
WHERE NOT EXISTS (Select * 
                  from UserTable 
                  where userid='"4424" + "' AND Email='" + email + "');

【讨论】:

  • 那么我的插入值在哪里? “2424”值?
  • @Earthling,如果有帮助,请参阅答案中的编辑。将这些值用作选择查询中的列。
  • @Rahul,您的第二次选择是错误的。使用insert (<fields>) select <values> where not exists(...) 就完成了。
  • @Arvo,嗯,是的,因为 WHERE 根本没有任何意义。
  • @Rahul,也删除FROM tbl1 部分,否则您将再次插入许多记录。您不需要FROM 子句来选择常量数据。
猜你喜欢
  • 2013-04-17
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2018-01-28
  • 2019-06-28
  • 1970-01-01
相关资源
最近更新 更多