我正在尝试使用MySQL进行一些SQL工作,并且遇到了这个插入语句的问题:
INSERT INTO properties (fkid, name, value)
SELECT 3, 'foo', 'bar'
WHERE NOT EXISTS (
SELECT 1 FROM properties WHERE fkid = 3 AND name = 'foo'
)
如果fkid / name已经存在,它应该是no-op,我想要一些也适用于Postgres的东西。我现在确信有一些我看不到的蠢事。
对于它的价值,错误是:
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'WHERE NOT EXISTS (SELECT 1 FROM vertex_properties WHERE vertex_id = 4 AND name ='
从其他示例中我可以看到here on this site,它应该有效。请有人能让我摆脱痛苦。
编辑:澄清一下,我想要一个跨平台(Postgres / MySQL)“插入,如果不存在”的解决方案。 INSERT IGNORE ...
仅适用于MySQL,INSERT ... SELECT WHERE NOT EXISTS ...
似乎只适用于Postgres。
答案 0 :(得分:0)
您需要FROM子句,因为您正在使用WHERE。在哪里需要知道哪些表不应该存在。
INSERT INTO properties (fkid, name, value)
SELECT 3, 'foo', 'bar'
FROM properties
WHERE NOT EXISTS (
SELECT 1 FROM properties WHERE fkid = 3 AND name = 'foo'
)