3

多対多の関係になるように、関連商品の表を作ってみたいと思います。私は、製品がそれら自身と関係がないことを確認したいと思います。

私のテーブルは次のようになります。

ProductID int
RelatedToProductID int
Active bit

次のような値があります。

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

しかし、私は最後のような関係を除外したいと思います。製品はそれ自体と関係があります。

誰かがmssqlでそれを可能にする方法を知っていますか?

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 に答える