当前位置: 首页 > 面试题库 >

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

公孙志
2023-03-14
问题内容

在SQL中,是否有一种方法可以强制一组列中只有一个列具有值,而其他列为null?可能是制约因素还是触发因素?这种类型的东西可能是用于查找表的,但是是否有其他替代表设计可能会更好地完成此工作呢?

例如:

ID    OtherTable1ID    OtherTable2ID    OtherTable3ID
-----------------------------------------------------
1     23               NULL             NULL
2     NULL             45               NULL
3     33               55               NULL   -- NOT ALLOWED

主要问题是这些列都是其他表的FK,因此我无法将它们折叠为单个列。

我正在使用SQL Server,但是任何答案都可以。


问题答案:

@tvanfosson的建议约束可以在三列中正常工作,但出于一般性考虑,我更喜欢

(cast(col1 is not null, int) +
 cast(col2 is not null, int) +
 cast(col3 is not null, int)) = 1

因为它可以更好地推广到具有“线性增长”(而不是“按平方增长”)编码量的任何数量的列(在SQL方言中甚至更整洁,不需要显式地将布尔aka位转换为int,但是我不知道SQL
Server是否是其中之一)。



 类似资料:
  • 问题内容: 但是我似乎无法使它与Visual Studio 2008中的SQL Server Express一起使用。 相同的表布局,一列具有标识和主键。 问题答案: INSERT INTO dbo.TableWithOnlyIdentity DEFAULT VALUES 就我而言,这很好。您如何尝试将这些行放入数据库中?SQL Server Mgmt Studio?从.NET应用程序进行SQL查

  • 我正在开发一个spring boot应用程序。我试着开发了一些单元测试。单元测试必须在不启动容器中的应用程序的情况下运行,必须是如此快,可以在不需要大量时间的情况下运行。假设我有一个类名,如下所示: 和以下测试:

  • 我想在PostgreSQL中设置一个表,这样两列在一起必须是唯一的。任何一个值都可以有多个值,只要没有两个值同时共享。 例如: 因此,和可以重复,但不能同时重复。因此,这是允许的(不包括id) 但不是这个:

  • 问题内容: 我有3个变量:,和。 如何设置并执行一次此查询? 问题答案:

  • 问题内容: 基本上,我想使此命令起作用: EntryDate以文本形式在数据库中,但是TotalTime是一个数字。我需要将TotalTime转换为文本,因为我已经注意到,如果我将两种不同类型的值组合在一起,它只会使输出空白。 我知道我应该使用CAST(TotalTime为XXX),但是我不确定我可以合法地将其强制转换为什么(char / nchar似乎不起作用,字符串和文本都不起作用)。我总是会

  • 问题内容: 我有一个熊猫数据框。我尝试将包含字符串值的两列首先连接到列表中,然后使用zip,我将列表的每个元素都用’_’连接。我的数据集如下: 我想将这两列连接到第三列,如下所示,分别用于数据框的每一行。 我已经使用下面的代码在python中成功完成了此操作,但该数据框非常大,并且需要花费很长时间才能为整个数据框运行它。我想在PySpark中做同样的事情以提高效率。我已经成功读取了spark数据框