簡體   English   中英

我可以使用帶有檢查約束的select語句

[英]Can I use select statement with check constraint

我的表是父子表,其中包含兩列。 第一列是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)的部分, select ID from table where ParentID = 0 (null)約束,您可以使用后插入或更新DML觸發器 ,可以在此處找到一些觸發器示例

你可以這樣做:

insert into TABLE_NAME(PARENT_ID,ID)
(select <THE_PARENT_ID>, <ID> from DUAL where 
  exists (select 1 from TABLE_NAME where PARENT_ID = <THE_PARENT_ID>))

這樣就不會插入那些實際上不在TABLE_NAME中的PARENT_ID。

您可以先修復數據模型。 你的桌子有兩種實體 - 父母和孩子。 為您的父母創建一個單獨的表,然后您可以使用普通的參考約束。

暫無
暫無

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

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