我想創建以下表格(例如簡化為鍵):
CREATE TABLE a (
TestVer VARCHAR(50) PRIMARY KEY,
TestID INT NOT NULL
);
CREATE TABLE b (
RunID SERIAL PRIMARY KEY,
TestID INT NOT NULL
);
WhereTestID不是唯一的,但我希望表 bTestID只包含表 a 的“TestID”中的值。
我相當確定我不能將其設為外鍵,因為外鍵的目標必須是鍵或唯一的,并且發現這篇文章支持這一點。
根據這篇文章,觸發器似乎有可能,其中我的插入看起來像:
CREATE TRIGGER id_constraint FOR b
BEFORE INSERT
POSITION 0
AS BEGIN
IF (NOT EXISTS(
SELECT TestID
FROM a
WHERE TestID = NEW.TestID)) THEN
EXCEPTION my_exception 'There is no Test with id=' ||
NEW.TestID;
END
但我寧愿不使用觸發器。如果有的話,還有什么其他方法可以做到這一點?
uj5u.com熱心網友回復:
觸發器是持續維護此類約束的唯一方法,但是您可以在使用表 b 的查詢中洗掉所有不需要的行:
with clean_b as (
delete from b
where not exists (select from a where a.TestID = b.TestID)
)
select *
from b
where ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497095.html
標籤:PostgreSQL
