IF EXISTS()出错

时间:2016-12-02 10:18:24

标签: mysql sql relational-database

IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer='appl') THEN
      INSERT INTO Products(product_id, name, category, manufacturer) 
         VALUES (10000, 'IphoneZ', null, 'appl');
  

错误:语法错误在或附近" IF"第1行:如果不存在(选择1   FROM Products WHERE name =' Iphone1'甲...

任何人都可以帮我理解我做错了吗?

3 个答案:

答案 0 :(得分:0)

MySQL仅支持编程块中的IF 语句 - 存储过程,函数和触发器。因此,你无法做到你想要的那样。

相反,您只需编写一个查询:

INSERT INTO Products (product_id, name, category, manufacturer)
    SELECT product_id, name, category, manufacturer
    FROM (SELECT 10000 as product_id, 'IphoneZ' as name, null as category, 'appl' as manufacturer) t
    WHERE NOT EXISTS (SELECT 1 FROM Products p WHERE p.name = t.name and p.manufacturer = t.manufacturer);

实际上,最好让数据库直接强制实现这种独特性。您可以使用唯一约束/索引来执行此操作:

CREATE UNIQUE INDEX unq_product_manufacturer_name ON product(manufacturer, name);

然后,您可以通过执行以下操作来编写查询以忽略错误:

INSERT INTO Products (product_id, name, category, manufacturer)
    VALUES (10000, 'IphoneZ', null, 'appl')
    ON DUPLICATE KEY UPDATE category = VALUES(category);

ON DUPLICATE KEY没有做任何事情 - 它只是为了避免在插入重复值时返回错误。

答案 1 :(得分:0)

您在IF语句末尾缺少END IF关键字。而且,此SQL语句只能用于例如存储过程或存储函数的例程块。

你的SQL应该是这样的:

IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer = 'appl') THEN
  INSERT INTO Products(product_id, name, category, manufacturer) 
  VALUES (10000, 'IphoneZ', null, 'appl');
END IF;

答案 2 :(得分:0)

  1. 是MySQL还是SQL服务器?
  2. 我认为你写错了:name =' Iphone1' 。应该是' IphoneZ'。
  3. 您在某些地方使用单引号,在某些地方使用双引号。
  4. 如果是mysql,请尝试以下查询 INSERT INTO产品(product_id,名称,类别,制造商)  SELECT * FROM(选择10000,' IphoneZ',null,' appl')AS tmp_table 什么不存在(从Products_arun中选择1名称=' IphoneZ'  AND manufacturer =' appl')LIMIT 1;

    如果是SQL Server,请尝试以下查询 如果不是EXISTS(选择1来自产品名称=' IphoneZ' AND制造商=' appl') INSERT INTO产品(product_id,名称,类别,制造商) 价值观(10000,' IphoneZ',null,' appl');