INSERT,除非日期相同



是否有可能(在Postgres中)做以下2个INSERTs,或者在逻辑上等效的东西(提议的INSERTs不像它们那样工作,但也许它们可以稍微修改?):

CREATE TABLE IF NOT EXISTS table01(
userid     int8 NOT NULL,
save       date NOT NULL,
followers  int4
);
CREATE  UNIQUE INDEX  ON table01 (userid,save);
  • INSERT0:
INSERT  INTO table01 (userid,save,followers)  VALUES (%s,%s,%s)
ON CONFLICT (userid)  DO  INSERT INTO table01 (userid,save,followers) VALUES (%s,%s,%s)
WHERE table01.save!=save;
  • INSERT1:
INSERT  INTO table01 (userid,save,followers)  VALUES (%s,%s,%s)  WHERE table01.save!=save;

逻辑是:

  • 尝试插入一行
  • 如果userid有冲突,那么无论如何插入行,除非日期(save)是相同的

简介:

  1. 显示的2INSERTs(或类似的东西)可能吗?
  2. 有可能做ON CONFLICT DO INSERT(就像一个做ON CONFLICT DO UPDATE)?
  3. 是否有可能做INSERT INTO WHERE(就像一个做SELECT FROM WHERE)?

一个简单的insert似乎可以做到你想要的:

INSERT  INTO table01 (userid, save, followers)
VALUES (%s, %s, %s);

这将插入一个新行,除非userid/save对已经存在。在这种情况下,它将生成一个错误。如果不希望出现错误,可以使用on conflict do nothing:

INSERT  INTO table01 (userid, save, followers)
VALUES (%s, %s, %s)
ON CONFLICT (userid, save) DO NOTHING;

相关内容

  • 没有找到相关文章

最新更新