pg触发器的实现逻辑如下 数据表这个人没有历史记录id,则插入时recommment置为'T' ② 数据表有历史记录,分以下两种情况 a)历史记录judge_type全是'1'的话,则将所有的历史记录recommment置为'F',当前记录插入时recommment置为'T' b)历史记录judge_type存在'2'的话,历史记录不管,当前记录插入时recommment置为'F' sql
时间: 2024-01-05 08:02:56 浏览: 19
好的,下面是相应的pg触发器的实现逻辑:
```sql
CREATE OR REPLACE FUNCTION update_recommment() RETURNS TRIGGER AS $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM table_name WHERE id = NEW.id) THEN
NEW.recommment = 'T';
ELSE
IF EXISTS (SELECT 1 FROM table_name WHERE id = NEW.id AND judge_type = '2') THEN
NEW.recommment = 'F';
ELSE
UPDATE table_name SET recommment = 'F' WHERE id = NEW.id AND judge_type = '1';
NEW.recommment = 'T';
END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER update_recommment_trigger
BEFORE INSERT ON table_name
FOR EACH ROW
EXECUTE FUNCTION update_recommment();
```
与之前的触发器相比,这个触发器增加了一个判断条件,即判断当前插入的数据是否与数据表中已有的历史记录中的id一致。如果是新的id,那么插入时recommment字段会被置为'T'。如果是已有的id,则会根据judge_type字段的不同情况进行不同的处理,逻辑与之前的触发器相同。