【问题标题】:How to UPDATE after DELETE in postgreSQL如何在 postgreSQL 中删除后更新
【发布时间】:2021-10-08 16:42:41
【问题描述】:

我正在尝试在删除不同表中的值后更新表。

这是我对这个问题的简化函数查询:

create function updateoutfit(_id uuid,  _title text DEFAULT NULL::text)
    returns TABLE(id uuid, title text)
    language sql
as
$$
WITH del AS (DELETE FROM outfit_garment WHERE outfit_garment.outfit_id = _id RETURNING outfit_id),
     updateOutfit AS (
       UPDATE outfit SET
         title = _title
         FROM del
         WHERE outfit.id = del.outfit_id
         RETURNING id, title
     )
SELECT id,
       title
from updateOutfit as outfit
group by id, title;
$$;

如果有delete返回的outfit_id就好了:

DELETE FROM outfit_garment WHERE outfit_garment.outfit_id = _id RETURNING outfit_id

但如果没有要删除的行则失败。我试过这样的事情:

DELETE FROM outfit_garment WHERE outfit_garment.outfit_id = '1234' RETURNING (SELECT '1234' as outfit_id );

但它仍然返回 0 行。

有没有办法解决这个问题或更好的方法?

我正在使用 postgres 13.2

【问题讨论】:

  • 请始终声明您的 Postgres 版本。

标签: postgresql


【解决方案1】:

似乎您的UPDATE 应该是无条件的。所以分开DELETE。喜欢:

CREATE FUNCTION updateoutfit(_id UUID, _title text DEFAULT NULL::text)
  RETURNS table(id UUID, title text)
  LANGUAGE sql AS
$func$
DELETE FROM outfit_garment
WHERE  outfit_garment.outfit_id = _id;

WITH upd AS (
   UPDATE outfit
   SET    title = _title
   FROM   del
   WHERE  outfit.id = _id
   RETURNING id, title
   )
SELECT DISTINCT id, title
FROM   upd;
$func$;

【讨论】:

  • 谢谢@Erwin Brandstetter 我的查询实际上并不完整。 UPDATE 是无条件的,但我在 Update 之后确实有 INSERT,这在同一个函数中以 DELETE 为条件,我应该更新我的问题查询吗?
  • @Anita:如果在给出答案后它改变了问题的性质,不如问一个包含所有相关细节的新问题。
  • 我已经更新了查询,我认为问题仍然有效 :) 感谢您的建议。我希望现在它更清楚一点。
  • 当然,一个有效的问题,但这不是重点。关键是,它是不同的并且使现有答案无效。
  • 我创建了一个新问题,很抱歉,stackoverflow.com/questions/69501214/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多