如果只有表为空,我想在表中插入一行。我经历了这个Execute INSERT if table is empty?,但是无法这样做。我将MariaDB用作rdbms。请提供帮助。谢谢。
这是我的sql语法:
INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
SELECT ('F', 'F', 'F', 'F')
WHERE NOT EXISTS (SELECT * FROM `policy`)
我的表结构是:
CREATE TABLE `policy` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`policy1` varchar(255) DEFAULT NULL,
`policy2` varchar(255) DEFAULT NULL,
`policy3` varchar(255) DEFAULT NULL,
`policy4` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1
答案 0 :(得分:2)
您可以使用以下解决方案:
INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
SELECT * FROM (SELECT 'F' c1, 'F' c2, 'F' c3, 'F' c4)t
WHERE NOT EXISTS (SELECT 1 FROM `policy`);
答案 1 :(得分:2)
您也可以为此使用dual
表:
INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
SELECT 'F', 'F', 'F', 'F' -- no parentheses!
FROM dual
WHERE NOT EXISTS (SELECT * FROM `policy`) ;
dual
是一个内置表,只有一行,专门用于此类目的。命名和想法来自Oracle数据库。
答案 2 :(得分:0)
您可以使用存在的方式:
if not exists(select 1 from table)
begin
-- do stuff
end
答案 3 :(得分:0)
INSERT INTO `policy` (`policy1`, `policy2`, `policy3`, `policy4`)
Select * from (
SELECT ('F', 'F', 'F', 'F')
WHERE NOT EXISTS (SELECT 'F', 'F', 'F', 'F' FROM `policy`))