0

我有问题,如果行不存在,我想在表中插入字段

我的代码是:

INSERT INTO  `myTable` (
`circuit` ,
`date` ,
`session` ,
`lap` ,
`time`
) SELECT  'misano',  '2013-10-11',  1,  1,  '0:01:06:332'
FROM `myTable`
WHERE NOT EXISTS (SELECT 1 FROM `myTable` WHERE `circuit` = 'misano' AND `date` = '2013-10-11' AND `session` = 1 AND `lap` = 1 AND `time` = '0:01:06:332')

如果在“myTable”中至少有一行,则此代码可以正常工作。如果“myTable”为空,SQL 返回:0 行。

4

2 回答 2

5

如果 myTable 为空,则 SELECT ... FROM myTable 将永远不会产生任何行(即使没有 WHERE 条件)。

利用

从双

在外部选择中。DUAL 伪表始终只包含一行。EXISTS 子查询当然是针对 myTable 运行的。

编辑:

如果您在 myTable 上有唯一索引,请参阅 Filipe 建议的解决方案。

于 2013-10-20T14:38:00.087 回答
4

如果您的表中有主键或唯一索引,则可以使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO `myTable` (`circuit`, `date`, `session`, `lap`, `time`)
    VALUES ('misano', '2013-10-11', 1, 1, '0:01:06:332') 
ON DUPLICATE KEY
UPDATE `circuit` = VALUES (`circuit`), 
        `date` = VALUES (`date`), 
        `session` = VALUES (`session`), 
        `lap` = VALUES (`lap`), 
        `time` = VALUES (`time`)
于 2013-10-20T14:40:00.193 回答