Sql 两列上的复合非空约束
我希望有一个约束,其中我确保至少有两列不为null。 基本上,从这两列中,必须包含一个值 我怎么能有这样的约束?Sql 两列上的复合非空约束,sql,postgresql,liquibase,Sql,Postgresql,Liquibase,我希望有一个约束,其中我确保至少有两列不为null。 基本上,从这两列中,必须包含一个值 我怎么能有这样的约束? 有可能用液化糖吗?如果没有,是否可以通过SQL或某些postgres特定的东西进行检查?您可以使用检查约束。对于至少一个非空值: check (col1 is not null or col2 is not null) 如果只需要一个值来包含值: check (col1 is not null and col2 is null or col1 is null and
有可能用液化糖吗?如果没有,是否可以通过SQL或某些postgres特定的东西进行检查?您可以使用
检查约束。对于至少一个非空值:
check (col1 is not null or col2 is not null)
如果只需要一个值来包含值:
check (col1 is not null and col2 is null or
col1 is null and col2 is not null
)
或在博士后:
check ( (col1 is not null)::int + (col2 is not null)::int = 1 )
您可以使用检查约束。对于至少一个非空值:
check (col1 is not null or col2 is not null)
如果只需要一个值来包含值:
check (col1 is not null and col2 is null or
col1 is null and col2 is not null
)
或在博士后:
check ( (col1 is not null)::int + (col2 is not null)::int = 1 )
我喜欢为此使用num\u nonnulls()
:
<sql>
alter table the_table
add constraint at_least_one_not_null
check (num_nonnulls(col1, col2) >= 1)
</sql>
对于至少一个非空列:
check (num_nonnulls(col1, col2) >= 1)
check (num_nonnulls(col1, col2) = 1)
对于一个非空列:
check (num_nonnulls(col1, col2) >= 1)
check (num_nonnulls(col1, col2) = 1)
Liquibase没有检查约束的内置更改(至少在社区版本中没有),因此您需要对此进行
更改:
<sql>
alter table the_table
add constraint at_least_one_not_null
check (num_nonnulls(col1, col2) >= 1)
</sql>
改变表格
添加约束至少\u一个\u非\u空
检查(num_nonnulls(col1,col2)>=1)
我喜欢使用num\u nonnulls()
来实现这一点:
<sql>
alter table the_table
add constraint at_least_one_not_null
check (num_nonnulls(col1, col2) >= 1)
</sql>
对于至少一个非空列:
check (num_nonnulls(col1, col2) >= 1)
check (num_nonnulls(col1, col2) = 1)
对于一个非空列:
check (num_nonnulls(col1, col2) >= 1)
check (num_nonnulls(col1, col2) = 1)
Liquibase没有检查约束的内置更改(至少在社区版本中没有),因此您需要对此进行
更改:
<sql>
alter table the_table
add constraint at_least_one_not_null
check (num_nonnulls(col1, col2) >= 1)
</sql>
改变表格
添加约束至少\u一个\u非\u空
检查(num_nonnulls(col1,col2)>=1)
我会试试这个!但这似乎预示着,并没有出现在我的脑海里。你就是那个人。这个一般逻辑起作用了。我对你的答案投了赞成票,但会将另一个标记为批准,因为他也提到了如何与liquibaseI合作。我会试试这个!但这似乎预示着,并没有出现在我的脑海里。你就是那个人。这个一般的逻辑起作用了。我把你的答案投了赞成票,但会把另一个标记为赞成票,因为他还提到了如何使用Liquibasew来实现这个奇怪的功能,这是我不知道的。这很容易在Postgres中编写代码,我想知道为什么会有这样的代码。但无论如何,我学到了一些东西。@GordonLinoff:是的,它真的很方便。还有一个num_nulls()
表示“相反”,感谢您展示了这一点:)我也没有听说过:)这是一个多么奇怪的函数,我以前不知道。这很容易在Postgres中编写代码,我想知道为什么会有这样的代码。但无论如何,我学到了一些东西。@GordonLinoff:是的,它真的很方便。还有一个num_nulls()
的“反面”感谢您展示:)我也没听说过:)与答案dba.SE相关:与答案dba.SE相关: