Sql 是否有任何选项将某个字段的值限制为其他字段的值?
SQL问题 想象一下,我得到了一个带有以下字段的表:Sql 是否有任何选项将某个字段的值限制为其他字段的值?,sql,Sql,SQL问题 想象一下,我得到了一个带有以下字段的表: 第1组 第二组 胜利者 我能否将“赢家”的价值限制为“团队1”或“团队2”的价值 (team1和team2是“Team”表的外部字段) 因此,如果我有团队: 皇家马德里 曼彻斯特城 尤文图斯 这场比赛是皇家马德里对尤文图斯的比赛,我不想给机会让“曼城”进入“赢家”的行列。我可能会用稍微不同的模型,使用柱结构而不是约束或规则来强制赢家 > Create table Teams ( > Id integer >
- 第1组
- 第二组
- 胜利者
- 皇家马德里
- 曼彻斯特城
- 尤文图斯
这场比赛是皇家马德里对尤文图斯的比赛,我不想给机会让“曼城”进入“赢家”的行列。我可能会用稍微不同的模型,使用柱结构而不是约束或规则来强制赢家
> Create table Teams (
> Id integer
> ,Name varchar(20) );
>
> Create table Games (
> HomeTeamId integer
> ,VisitingTeamId integer
> ,HomeTeamWon boolean );
>
> Insert Into Teams(Id, Name) Values (1, 'Real Madrid');
> Insert Into Teams(Id, Name) Values (2, 'Manchester City');
> Insert Into Teams(Id, Name) Values (3, 'Juventus');
>
> Insert Into Games(HomeTeamId, VisitingTeamId, HomeTeamWon) Values (1,
> 2, True);
>
> Select
> HT.Name HomeTeam
> ,VT.Name VisitingTeam
> ,Case when HomeTeamWon Then HT.Name Else Vt.Name End WinningTeam
> From
> Games G inner join
> Teams HT on (G.HomeTeamId = HT.Id) inner join
> Teams VT on (G.VisitingTeamId = VT.Id)
在oracle数据库中,可以使用检查约束来实现。我不确定其他数据库
CREATE TABLE TAB1
(COL1 NUMBER,
COL2 NUMBER,
COL3 NUMBER
CONSTRAINT CHK1 CHECK (COL3 IN (COL1,COL2) ))
干杯 为了帮助您,我们需要表和示例数据的描述。这太模糊了。
为空
不需要,因为检查
处理空
值的方式。感谢@GordonLinoff。但是当col3为空时会发生什么呢<代码>检查仅在条件为false时失败,而在条件为NULL时不失败。在这方面,它不同于where
和when
条件。正确!更新了答案。