【发布时间】:2019-01-07 22:12:22
【问题描述】:
我试图在单个查询中切换一个关系,如果它已经存在,它会删除该关系,否则它会创建它。我可以添加带有 bool 的第三列来切换它,但我宁愿删除它。
架构
CREATE TABLE IF NOT EXISTS thread_subscription (
profile_id INTEGER REFERENCES profile (id),
thread_id INTEGER REFERENCES thread (id),
UNIQUE(profile_id,thread_id)
)
查询
INSERT INTO thread_subscription (profile_id,thread_id)
VALUES ($1,$2) ON CONFLICT (profile_id,thead_id)
DO DELETE FROM thread_subscription
WHERE profile_id = $1 AND thread_id = $2;
【问题讨论】:
-
当您尝试插入的
profile_id,thread_id已经存在于表中时,您想做什么?不是DELETE我想象的那样? -
是的,我想删除它(只是关系而不是实际的配置文件或线程)。此查询位于 api 端点后面,用于将用户个人资料的订阅状态切换到论坛线程。
-
所以你对一个表运行
INSERT,并且你期望在某些情况下它实际上会执行DELETE?这看起来不是一个好方法。如果你想INSERT,那么INSERT。如果你想DELETE,那么DELETE。但必须在应用程序中做出选择,然后再运行查询 -
我想在单个查询中切换关系。我不认为这是一个晦涩难懂的操作。
标签: sql postgresql stored-procedures sql-insert sql-delete