2016-12-02 92 views
-1
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'); 

ERROR: syntax error at or near "IF" LINE 1: IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' A...誤差IF EXISTS()

誰能幫助我理解我在做什麼錯?

+1

雙引號代替單引號? – jarlh

+1

閱讀說明書 http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html – 2oppin

+1

谷歌搜索你的標題和'mysql':http://stackoverflow.com/5528854 /問題/使用-的-mysqls - 如果存在 - 。請閱讀[問]。 – philipxy

回答

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沒有做任何事情 - 它只是用來避免在插入重複值時返回錯誤。

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; 
0
  1. 它是MySQL或SQL服務器?
  2. 我想你錯了:name ='Iphone1'。它應該是'IphoneZ'。
  3. 您在某些地方使用了單引號,在某些地方使用了雙引號。

如果是那麼MySQL試試下面的查詢 INSERT INTO產品(產品編號,名稱,類別,製造商) SELECT * FROM(選擇10000, 'IphoneZ',NULL, '申請')AS tmp_table的 WHERE NOT EXISTS(SELECT 1 FROM Products_arun WHERE name ='IphoneZ' AND manufacturer ='appl')LIMIT 1;

如果是那麼SQL服務器試試下面的查詢 IF NOT EXISTS(SELECT 1 FROM產品WHERE name = 'IphoneZ' 和製造商= '申請') INSERT INTO產品(產品編號,名稱,類別,製造商) VALUES (10000,'IphoneZ',null,'appl');