回答

收藏

SQL:如何强制在一组列中仅设置单个列

技术问答 技术问答 190 人阅读 | 0 人回复 | 2023-09-14

在SQL是否有一种方法可以强制一组列中只有一列具有值,而其他列null?可能是限制因素还是触发因素?这种类型的东西可能是用来找表的,但是有没有其他代表设计可以更好的完成这项工作呢?
- S# @6 T/ d4 ]3 H" ~* I7 {5 n8 ^9 O, u例如:1 M3 ^  @/ w, S" m4 w3 ^
ID    OtherTable1ID    OtherTable2ID    OtherTable3ID-----------------------------------------------------           NULL             NULL2     NULL                                                             555555                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     NULL 3333   333          555555555555                  NULL   -- NOT ALLOWED主要问题是这些列是其他的FK,所以我不能把它们折叠成单列。6 A# W" p" g% X/ o
我正在使用SQL Server,但是任何答案都可以。  T! ?4 C+ f1 Q' p7 I3 O- E
                                                                , Z6 M7 T, `* q, T1 s
    解决方案:                                                               
* `- F; r& T  Q7 s                                                                @tvanfosson建议约束可以在三列中正常工作,但出于一般考虑,我更喜欢
, b$ @" \1 n( T' `+ B: r(cast(col1 is not null,int)   cast(col2 is not null,int)   cast(col3 is not null,int)) = 1因为它可以更好地推广到任何数量的线性增长(而不是平方增长)(在SQL方言甚至更整洁,布尔不需要明确aka位转换为int,但我不知道SQL" p' k( E4 T1 o* W1 k6 `
Server是否就是其中之一)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则