我已尝试过此代码的多种变体,并且一直给我SQL状态:42601错误。我已经查看过这些文档,并尝试使用他们的示例,这些示例有时可以正常工作,但却没有按照我的意愿行事。
IF (SELECT guildid FROM Servers <> 1) THEN
INSERT INTO Servers (guildid) VALUES (1)
END IF;
我的服务器表很简单。我只有一行叫做guildid。我不想要CASE语句,因为它只输出消息。
答案 0 :(得分:1)
如果您不必担心竞争条件(if
方法建议),那么:
INSERT INTO Servers (guildid)
SELECT guildid
FROM (VALUES (1)) v(guildid)
WHERE NOT EXISTS (SELECT 1 FROM Servers s WHERE s.guildid = v.guildid);
为了保护表格,我建议在其上添加一个唯一索引。实际上,只需将guildid
声明为主键即可。在这种情况下,如果您尝试插入重复值,原始插入将失败。
答案 1 :(得分:0)
如果您对该列有唯一约束,则可以使用on conflict do nothing
:
INSERT INTO Servers (guildid) VALUES (1)
ON CONFLICT DO NOTHING;