2017-04-07 66 views
0

這是我的查詢:SQL如果不存在()將不工作

IF NOT EXISTS (SELECT * 
       FROM teovecerdi 
       WHERE LocationName = 'Frankfurt' 
       AND StartDate = '14/02/2015' 
       AND EndDate = '17/02/2015' 
       AND Price = '2700') 
INSERT INTO teovecerdi(LocationName, StartDate, EndDate, Price) 
VALUES(?,?,?,?) 

你能告訴我有什麼錯呢?我也嘗試過BEGIN和END,它仍然給我一個錯誤。

編輯:我正確處理參數。

+1

您可能只想在這些字段上創建一個唯一索引,然後執行INSERT INTO ... ON DUPLICATE KEY UPDATE Price = Price'或INSERT IGNORE ...' – dave

+0

某些指導:https:// chartio .com/resources/tutorials/how-to-insert-if-row-does-exist-upsert-in-mysql/ –

+0

「NOT EXISTS」查詢中的值與您嘗試的值相同插?然後,如果它們包含表的唯一索引,則可以使用'INSERT IGNORE'。 – Barmar

回答

0

你不能在查詢或腳本中使用MySQL的過程語法(包括IF就像那樣,以及迭代構造等)。

1

您不能在查詢中使用IF語句,它只能在存儲過程中使用。

如果您想要執行條件INSERT,則可以使用SELECT查詢,該查詢僅在滿足條件時才返回一行。

INSERT INTO teovecerdi(LocationName, StartDate, EndDate, Price) 
SELECT ?, ?, ?, ? 
FROM DUAL 
WHERE NOT EXISTS (SELECT * 
    FROM teovecerdi 
    WHERE LocationName = 'Frankfurt' 
    AND StartDate = '14/02/2015' 
    AND EndDate = '17/02/2015' 
    AND Price = '2700') 
+0

好的,有趣的方法!我猜'DUAL'是某種虛擬桌子? –

+1

是的,就是這樣。 – Barmar

0

我打算建議一種不同的方法。我的猜測是,你想LocationName, StartDate, EndDate, Price是唯一的。所以,讓數據庫爲你做的工作:

CREATE UNIQUE INDEX unq_teovecerdi_4 on teovecerdi(LocationName, StartDate, EndDate, Price); 

然後只是當你做一個插入時要「忽略」錯誤。我的首選方法是:

INSERT INTO teovecerdi (LocationName, StartDate, EndDate, Price) 
    VALUES (?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE LocationName = VALUES(LocationName); 

ON DUPLICATE KEY什麼都不做,除了吸收錯誤,當您試圖插入重複。