2012-05-13 243 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个独特的列? –