我的表是父子表,其中包含两列。第一列是 ID
,它是自动编号。另一列是具有特殊条件的 ParentID
。如果该行是 ParentID = 0
的父行,否则它应该与 ParentID 行相关。例如:
**ID** | **ParentID**
---------------------
1 0
2 0
3 2
4 [it can be 0 or 1 or 2 NOT 3]
ParentID 取决于 ID 列,如果 ID 包括 ParentID = 0,则 ParentID 可以是该 ID。
问题是我可以做这样的事情吗??
constraint ParentID_ck ckeck(ParentID in(0, select ID from table where ParentID = 0;))
或者我应该使用其他解决方案,例如 PL/SQL:
DECLARE
--Somthing..
BEGIN
--Somthing..
END;
并将其放入检查约束内。
最佳答案
您需要使用 外键约束和触发器 组合来实现此约束
您可以使用从表到其自身的可为空的外键。 (parentID == null shows the root nodes)
。
对于约束的 select ID from table where ParentID = 0 (null)
部分,您可能是 use a after insert or update DML trigger ,可以找到一些触发器示例 here
关于sql - 我可以使用带有检查约束的 select 语句吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16766128/