0

我正在尝试使一些 SQL 与 MySQL 一起工作,但在使用此插入语句时遇到了问题:

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 已经存在,它应该是无操作的,我想要一些也适用于 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 ='

从我可以在此站点上看到的其他示例中,它应该可以工作。请有人能让我摆脱痛苦。

编辑:澄清一下,我想要一个跨平台(Postgres/MySQL)“如果不存在则插入”解决方案。INSERT IGNORE ...仅适用于 MySQL,INSERT ... SELECT WHERE NOT EXISTS ...似乎仅适用于 Postgres。

4

1 回答 1

0

您需要 FROM 子句,因为您使用的是 WHERE。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' 
)
于 2013-07-03T18:37:02.840 回答