我有问题, 如果行不存在,我想在表中插入字段
我的代码是:
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行。
答案 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`)