我有以下查询,可以在MySQL和MariaDB上使用:
INSERT into some_table (column1, column2, column3, column4, column5)
SELECT 'val1', 'val2', 'val3', 'val4', 'val5'
FROM `some_table`
WHERE NOT EXISTS (
SELECT `column1`, `column2` from `some_table`
WHERE `column1` = 'val1' and `column2` = 'val2'
) limit 1`
它根据val1和val2的唯一值检查行是否存在:如果该行存在,则查询不执行任何操作。如果该行不存在,则查询将插入一个值为val1、val2、val3、val4和val5的新行。
除非表为空,否则查询将正常工作,在这种情况下,不会插入任何值。
如何修改此查询,使其也能处理空表?
(注意:我不能在这个表上创建唯一的索引)
发布于 2018-08-14 05:22:16
不要从表本身中选择,而是从特殊的表DUAL
中选择。
INSERT into some_table (column1, column2, column3, column4, column5)
SELECT 'val1', 'val2', 'val3', 'val4', 'val5'
FROM DUAL
WHERE NOT EXISTS (
SELECT `column1`, `column2` from `some_table`
WHERE `column1` = 'val1' and `column2` = 'val2'
)
DUAL
是一个特殊的虚拟表名,当您不需要从真实表中提取数据时,可以使用它。
另一种选择是在(column1, column2)
上创建唯一索引,然后使用INSERT IGNORE
。如果您尝试创建副本,它将被静默跳过。
ALTER TABLE some_table ADD UNIQUE INDEX (column1, column2);
INSERT IGNORE into some_table (column1, column2, column3, column4, column5)
VALUES ('val1', 'val2', 'val3', 'val4', 'val5')
https://stackoverflow.com/questions/51830707
复制相似问题