如果空表中不存在行不工作,则SQL插入表中

时间:2013-10-20 14:30:57

标签: php mysql sql

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

我的代码是:

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行。

2 个答案:

答案 0 :(得分:5)

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

使用

FROM dual

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

修改

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

答案 1 :(得分: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`)