首页 > 解决方案 > 在具有 X 和 Y 列的表中,是否可以放置约束以防止 X == Y 用于任何一条记录?

问题描述

例如,假设我正在为一个足球联赛建模。我有一张桌子teams和一张桌子games。一个游戏有两个外键,home_team_id并且away_team_id. 绝不应该这样,对于一场比赛,home_team_id= away_team_id(一支球队不能与自己比赛)。

我是防止不良数据进入数据库的坚持者。是否可以添加约束以防止这种情况发生?

请注意,我问的是一般性问题,而不是针对任何一种 SQL 风格的问题。

标签: sqlconstraints

解决方案


你可以做:

create table t (
  x int,
  y int,
  constraint chk1 check (x <> y)
);

insert into t (x, y) values (123, 456); -- works

insert into t (x, y) values (200, 200); -- fails

请参阅db<>fiddle的运行示例。


推荐阅读