簡體   English   中英

在postgres SQL中使用OR進行檢查約束

[英]Making a CHECK CONSTRAINT with OR in postgres SQL

我想知道是否有可能先在CHECK CONSTRAINT中評估某些條件,然后對另一個表達式進行OR。

我的情況:

4張桌子:\\

  • main,一個id,一個類型變量(使它的smallint變為0-2)和指向下表的外鍵:
  • a,b和c,僅包含一個id

我想做一個檢查約束,基本上遵循以下邏輯:

if main.type = 0:
    main.a != NULL
    main.b = NULL
    main.c = NULL
elif main.type = 2:
    main.a = NULL
    main.b = NULL
    main.c != NULL

如果類型= 1,我不在乎填寫的內容。

我試着像這樣檢查檢查約束:

CHECK((main.type = 0 AND main.a != NULL AND main.b = NULL AND main.c = NULL) OR
(main.type = 2 AND main.a = NULL AND main.b = NULL AND main.c != NULL))

問題在於,在應用此約束后,內部括號會被刪除/忽略,這意味着它變得很無用,並且無法正常工作。

這是否可以通過“檢查約束”解決,還是應該為此使用觸發器?

!= NULL 那是行不通的。 這似乎是您想要的邏輯:

CHECK ( (type = 0 and a is not null and b is null and c is null) or
        (type = 2 and a is null and b is null and c is not null) or
        (type = 1)
      )

暫無
暫無

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

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