Sql 是否有任何选项将某个字段的值限制为其他字段的值?

Sql 是否有任何选项将某个字段的值限制为其他字段的值?,sql,Sql,SQL问题 想象一下,我得到了一个带有以下字段的表: 第1组 第二组 胜利者 我能否将“赢家”的价值限制为“团队1”或“团队2”的价值 (team1和team2是“Team”表的外部字段) 因此,如果我有团队: 皇家马德里 曼彻斯特城 尤文图斯 这场比赛是皇家马德里对尤文图斯的比赛,我不想给机会让“曼城”进入“赢家”的行列。我可能会用稍微不同的模型,使用柱结构而不是约束或规则来强制赢家 > Create table Teams ( > Id integer >

SQL问题

想象一下,我得到了一个带有以下字段的表:

  • 第1组
  • 第二组
  • 胜利者
我能否将“赢家”的价值限制为“团队1”或“团队2”的价值

(team1和team2是“Team”表的外部字段)

因此,如果我有团队:

  • 皇家马德里
  • 曼彻斯特城
  • 尤文图斯

这场比赛是皇家马德里对尤文图斯的比赛,我不想给机会让“曼城”进入“赢家”的行列。

我可能会用稍微不同的模型,使用柱结构而不是约束或规则来强制赢家

> 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
条件。正确!更新了答案。