簡體   English   中英

SQL 同表的另一列存在約束校驗值

[英]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 updatecascade delete以自動完成更改,無需任何編碼。 如下所示:

ALTER TABLE tasks 
ADD CONSTRAINT FK_tasksParent
FOREIGN KEY (parent) REFERENCES tasks(task);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM