[英]SQL Constraint check value exists in another column in the same table
我有一個表,其中每一行都是一個任務。 每個任務都有一個父任務(即實例化它的任務),或者一個 null 父任務(任務在開始時發生)。 我想給父列加一個約束,讓它只能取一個null的值或者任務列中已經存在的不等於自己任務的值。
tasks
=====
task (PK) | description | duration | parent
----------+-------------+----------+--------
ABC-123 | Foo | 10 | Null <--- OK
DEF-456 | Bar | 8 | ABC-123 <--- OK
GHI-789 | Baz | 12 | ABC-123 <--- OK
JKL-987 | Boz | 7 | Null <--- OK
MNO-654 | Foz | 88 | GHI-789 <--- OK
PQR-321 | Faz | 6 | ZZZ-999 <--- Not OK; parent doesn't exist
STU-123 | Fez | 5 | STU-123 <--- Not OK; can't be its own parent
我怎樣才能做到這一點? 我想添加一個約束,如: CONSTRAINT ck_parent_valid CHECK parent <> task AND parent NOT IN task
..但上面顯然不起作用,因為我需要同時引用當前行中的任務和整個任務列.
一種方法是在表中添加外鍵約束,RDBMS 會自動檢查它,您還可以設置cascade update
或cascade delete
以自動完成更改,無需任何編碼。 如下所示:
ALTER TABLE tasks
ADD CONSTRAINT FK_tasksParent
FOREIGN KEY (parent) REFERENCES tasks(task);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.