我的表是父子表,其中包含两列。第一列是 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/

10-13 23:28