用select错误的Mysql插入查询(在Postgres / H2中工作)

时间:2013-07-03 17:36:58

标签: mysql sql sql-insert

我正在尝试使用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。

1 个答案:

答案 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' 
)