强制让两列拥有唯一的值。

3

我希望制作一个与产品相关的表格,所以产品将具有多对多的关系。我想确保产品不会与自己建立关系。

我的表格如下:

ProductID int
RelatedToProductID int
Active bit

并且具有以下这些值:

productID RelatedToProductID Active
1         2                  1
1         3                  1
2         1                  1
2         2                  1

但我希望排除掉像最后一个这样的关系,其中产品与自身有关联。

有人知道如何在MS SQL中实现这个功能吗?


考虑使用 GUID/UUID。 - Germann Arlington
4个回答

4
您可以使用“check”约束来防止自关联:
alter table YourTable
    add constraint CHK_YourTable_NoSelfRelation
    check (productID <> RelatedToProductID)

谢谢,你是救命恩人。我已经寻找这个很长一段时间了。 - Tom

1

您可以在列(productID,RelatedToProductID)上添加唯一约束。

alter table YourTable add UNIQUE(productID,RelatedToProductID)

-1

来自MSDN

C. 创建唯一的非聚集索引

以下示例在表的列上创建唯一的非聚集索引。该索引将强制对插入到该列中的数据进行唯一性约束。

查询:

CREATE UNIQUE INDEX AK_ProductId_RelatedToProductId
    ON table (ProductId, RelatedToProductId);

另请参阅唯一索引 vs 唯一约束的区别


我刚刚看到了这个问题,所以我来回答你的真正问题。它被踩是因为你没有回答问题,而是给出了一个错误的答案。这是一个错误的答案,因为你给出的答案与所问的问题不符。 - Robert Baker

-2
Select ... From Table Where productId <> RelatedToProductId

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接