2012-05-13 481 views
3

我試圖插入一個成分表,如果它不存在。 我使用的語法如下:mysql插入值如果不存在

INSERT INTO ingredient(Name) 
(
SELECT 'ingName' FROM dummytable WHERE 
(SELECT count(*) FROM ingredient WHERE Name = 'ingName')=0) 

這似乎並不工作(0受影響的行),即使SELECT查詢似乎回到期望的結果(其中包含「ingName」的條目)。

的「成分」表中有2列:姓名,身份證(ID是自動遞增)

感謝, 李

回答

3

那是因爲你的內部查詢SELECT count(*) FROM ingredient WHERE Name = 'ingName'返回一個值> 0,因此上查詢SELECT 'ingName' FROM dummytable WHERE未選擇任何行,因此沒有發生插入。

我試圖與有2列name|value一個測試表一樣,它也能正常工作

INSERT INTO test1(name) (
    SELECT 'name' FROM test2 WHERE 
    (
     SELECT count(*) FROM test2 WHERE name = 'bilboa' 
    ) 
    =0 
    ) 

插入2行與價值name原因,這就是我的選擇查詢我選擇,我的測試表2行。

7

其更好地添加唯一索引的列name

ALTER TABLE `ingredient` ADD UNIQUE(`Name`) 

這樣做,你可以使用INSERT IGNORE後:

INSERT IGNORE INTO `ingredient` ... /* anything */ 
+0

這是問題 – nawfal

+0

由於更好的解決辦法:)我會可能切換到這種解決方案,但我真的很好奇,找出爲什麼我的代碼不工作...... – user429400

+0

有沒有辦法檢查2個獨特的列? –