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'甲...
任何人都可以帮我理解我做错了吗?
答案 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)
如果是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');