1

テーブル コール ' Users' があり、そこにUserIDあります。

次のようなテーブル コール UsersFriends もあります。

create table UsersFriends
(   
UserID int references Users(UserID),
FriendID int references Users(UserID), 
primary key(UserID,FriendID)
)

ご覧のとおり、UserIDからFriendIDの参照ですUsers(UserID).

(1,1) のようなエントリがないことを確認したいのは、自分の友達になれないからです。だから、私はチェックをしようとしましたが、そうではありません..私はこのようにしようとしました:

create table UsersFriends
(   
User1ID int references Users(UserID),
FriendID int references Users(UserID) CHECK (FriendID in (select u.UserID from Users u where      
u.UserID!= User1ID)),
primary key(User1ID,FriendID)
)

しかし、私はエラーがあります:

Msg 1046, Level 15, State 1, Line 4
Subqueries are not allowed in this context. Only scalar expressions are allowed.

誰かが私を助けてくれますか?

ありがとう。

4

1 に答える 1

2

制約をインラインで定義してcheckおり、さらにサブクエリは許可されていません。以下のようにテーブルレベルで制約を定義する必要があります

create table UsersFriends
(   
UserID int references Users(UserID),
FriendID int references Users(UserID), 
primary key(UserID,FriendID),
CONSTRAINT CK_nested_friend check(UserID <> FriendID)
);

デモが必要な場合は、ここを参照してください http://sqlfiddle.com/#!3/1e405

于 2014-05-09T12:09:02.563 に答える