3

如果不存在,我正在尝试将成分插入成分表。我正在使用以下语法:

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

这似乎不起作用(0 行受影响),即使 SELECT 查询似乎返回了所需的结果(包含“ingName”的条目)。

“成分”表有 2 列:名称、id(id 自动递增)

谢谢,李

4

2 回答 2

7

最好在name列上添加唯一索引:

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

之后,您可以使用INSERT IGNORE

INSERT IGNORE INTO `ingredient` ... /* anything */
于 2012-05-13T19:20:55.303 回答
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 行中选择的内容。

于 2012-05-13T19:14:40.080 回答