3

我正在为相关产品制作一张表格,因此产品将具有多对多的关系。我想确保产品与他们自己没有关系。

我的表如下所示:

ProductID int
RelatedToProductID int
Active bit

并具有如下值:

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

但我想排除像上一个这样的关系,即产品与自身有关系。

有谁知道如何在 ms sql 中实现这一点?

4

4 回答 4

4

您可以使用check约束来防止自我关系:

alter table YourTable
    add constraint CHK_YourTable_NoSelfRelation
    check (productID <> RelatedToProductID)
于 2012-07-31T08:37:05.747 回答
1

您可以在列上添加 UNIQUE 约束 (productID,RelatedToProductID)

alter table YourTable add UNIQUE(productID,RelatedToProductID)
于 2012-07-31T08:44:19.400 回答
-1

来自MSDN

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

下面的示例在表的列上创建一个唯一的非聚集索引。索引将对插入列中的数据强制唯一性。

询问:

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

另请参阅唯一索引与唯一约束之间的区别

于 2012-07-31T08:39:34.953 回答
-2
Select ... From Table Where productId <> RelatedToProductId
于 2012-07-31T08:35:35.490 回答