gpt4 book ai didi

sql - 如何在条件插入时做某事

转载 作者:行者123 更新时间:2023-11-29 12:18:31 25 4
gpt4 key购买 nike

我有两张表,一张是电影列表,另一张是每部电影播放日期的列表。电影列表包含 nameidstart_dateend_date 列,而 id 是唯一标识符。

节目列表(带有日期的那个)有 idmovie_iddate

每次我 INSERT 一个新节目时,我希望更新电影列表:如果 show.datemovie.start_date 之前,我希望将 start_date 更新为 show.date 的值。结束日期也是如此 - 显然如果 show.datemovie.end_date 之后。

以下规则是我所坚持的:(注意:如果有效,它只会设置开始日期,一旦有效,完成结束日期应该很容易...)

CREATE RULE "movies_start_date_setter" AS ON INSERT TO "shows"
WHERE movies.id = NEW.movie_id AND movies.start_date < NEW.date
DO (UPDATE movies SET start_date = NEW.date);

它返回:错误:缺少表“电影”的 FROM 子句条目这个错误不会给我(作为初学者)我缺少 FROM 子句的任何信息以及原因。

既然每个人似乎都认为规则是个坏主意(而且我倾向于屈服于压力)我尝试了一个触发器,这对我来说绝对是全新的。

使用触发器(强烈推荐)它看起来像这样:

CREATE OR REPLACE FUNCTION adjust_start_date()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE movies SET start_date = NEW.date
WHERE id = NEW.movie_id AND start_date > NEW.date;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql';

其次是:

CREATE TRIGGER adjust_start_date_trigger
AFTER INSERT
ON shows
FOR EACH ROW
EXECUTE PROCEDURE adjust_start_date();

这个触发器可能有效也可能无效,它解决了我的问题但没有回答我原来的问题...还有比我更聪明的人吗(我当然希望如此!)?

最佳答案

movies 表在 where 子句中未知。使用:

create rule movies_start_date_setter as 
on insert to shows do (
update movies
set start_date = new.date
where id = new.movie_id and start_date > new.date
);

关于sql - 如何在条件插入时做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com