INSERT INTO my_table (field_1, field_2)
SELECT val_1, val_2
FROM my_table
WHERE NOT EXISTS (SELECT field_1
FROM my_table
WHERE field_2 = val_2)
LIMIT 1
我不能在field_2字段上使用唯一索引。 我正在尝试插入是否不存在具有field2 = val_2的元组。 如果没有“ where”子句,则此插入。 使用“ where”子句即使是空表,也不会插入。
有什么帮助吗?
答案 0 :(得分:0)
解决方案是检查密钥是否存在:
INSERT INTO my_table (field_1, field_2) ON DUPLICATE KEY INSERT IGNORE.
this question可能有用。
答案 1 :(得分:0)
我猜val_1
和val_2
不是表的列,对吗?
它们是您要在表中插入的值。
放下:
FROM my_table
并使用:
INSERT INTO my_table (field_1, field_2)
SELECT val_1, val_2
WHERE NOT EXISTS (
SELECT field_1
FROM my_table
WHERE field2 = val_2
)
答案 2 :(得分:0)
首先在您不想重复的一个或多个列上创建唯一索引。我无法判断是同时出现在field_2
上还是{>
create unique index unq_my_table_field_2 on my_table(field_2);
然后使用on duplicate key update
忽略该错误:
INSERT INTO my_table (field_1, field_2)
VALUES (val_1, val_2)
ON DUPLICATE KEY UPDATE field_2 = VALUES(val_2); -- this is a no-op, because the value is already the same
您的代码无法在空表上运行的事实与WHERE
子句无关,而与在from子句中使用from my_table
无关。如果没有行,则查询返回。 。 。没有行。毫不奇怪,什么也没插入。