53

我可以在检查约束中进行 SQL 子查询吗?

我有一个post带列的表id, owner
我有另一个action带列的user_id, post_id
user带列的表id

post_id -> post.id还有user_id -> user.id_post.owner -> user.id

现在我想限制post(post_id).id != user_idaction

这怎么可能?

4

1 回答 1

86

不支持在 CHECK 约束中查看当前行之外的内容。

http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html说:

指定为列约束的检查约束应仅引用该列的值,而出现在表约束中的表达式可以引用多个列。

目前,CHECK 表达式不能包含子查询,也不能引用当前行列以外的变量。

这种限制有充分的理由,但如果你喜欢在交通拥挤的情况下骑独轮车时玩弄燃烧的火把,你可以使用函数来颠覆这个限制。这种情况不会再咬你的情况很少见;相反,在触发代码中强制执行不变量会更安全。

http://www.postgresql.org/docs/9.1/interactive/triggers.html

于 2012-04-16T18:13:04.367 回答