我想检查我想要插入tableA的id是否存在于tableB中的if语句中 我可以做这样的事吗
if new.id exists (select id from tableB where stat = '0' ) then
some code here
end if;
当我尝试这个时,我收到一条错误信息,有什么想法吗?
答案 0 :(得分:1)
为什么不这样做呢?我对PostgreSQL不是很了解,但这可以在T-SQL中使用。
INSERT INTO TargetTable(ID)
SELECT ID
FROM TableB
WHERE ID NOT IN (SELECT DISTINCT ID FROM TargetTable)
答案 1 :(得分:0)
据推测,你想要这样的东西:
if exists (select 1 from tableB b where stat = '0' and b.id = new.id) then
some code here
end if;
答案 2 :(得分:0)
通常使用触发器来完成。触发功能可以解决这个问题:
CREATE FUNCTION "trf_insert_tableA"() RETURNS trigger AS $$
BEGIN
PERFORM * FROM "tableB" WHERE id = NEW.id AND stat = '0';
IF FOUND THEN
-- Any additional code to go here, optional
RETURN NEW;
ELSE
RETURN NULL;
END IF;
END; $$ LANGUAGE plpgsql;
CREATE TRIGGER "tr_insert_tableA"
BEFORE INSERT ON "tableA"
FOR EACH ROW EXECUTE PROCEDURE "trf_insert_tableA"();
一些注意事项:
INSERT
触发器中,您可以使用NEW
隐式参数来访问尝试插入的列值。在触发器功能中,您可以修改这些值,然后插入这些值。这显然仅适用于BEFORE INSERT
触发器; AFTER INSERT
触发器用于副作用,例如记录,审核或级联插入其他表。PERFORM
statement是SELECT
语句的一种特殊形式,用于测试数据的存在;它不返回任何数据,但它确实设置了可以在条件语句中使用的FOUND
隐式参数。RETURN NEW
使插入成功,RETURN NULL
使其失败。定义触发器后,您只需发出INSERT
语句:自动调用触发器函数。