【问题标题】:NEW.value IS DISTINCT FROM OLD.value seems to have no effect (PostgreSQL)NEW.value IS DISTINCT FROM OLD.value 似乎没有效果(PostgreSQL)
【发布时间】:2018-06-06 15:28:56
【问题描述】:

我有一个带有日期字段 (d) 和布尔字段 (b) 的第一个表 (A)。每次更新 d 时,它都会使用以下函数触发第二个表(B)中的插入:

BEGIN 

    INSERT INTO B(field)
    SELECT d
    FROM A
    WHERE b IS true AND OLD.d IS DISTINCT FROM NEW.d;

    RETURN NEW;

END

我希望它在 B 中插入一个包含 d 的元素,仅当 b 为真且 d 刚刚更新时,但每次触发该函数时,无论 d 是否更改,每个 b 为真的日期都会插入到 B 中与否。

触发器是一个行触发器,它在 d 更新之后触发。

我想我做错了什么,但我不知道是什么。

【问题讨论】:

    标签: sql postgresql triggers insert distinct


    【解决方案1】:

    我怀疑你想要这样的东西:

    INSERT INTO B (field)
        SELECT d
        FROM (SELECT new.d as d) n
        WHERE new.b IS true AND OLD.d IS DISTINCT FROM NEW.d;
    

    我不明白您为什么要插入(可能)来自a 的所有行。

    【讨论】:

    • 成功了!如果我只更新一个日期,我仍然不明白为什么会插入所有带有 b true 的行,而且我不知道 FROM(SELECT) 是一件事(通常对 SQL 来说仍然是新事物)。感谢您的快速回答!
    • @GabStPier 。 . .您的版本中有from a。这会从a 中选择所有行(当然,取决于过滤条件)。
    猜你喜欢
    • 2014-02-21
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2018-05-18
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多