SQL Server 2008 - 余分な列を持つビューを作成する 'HasMutual'

私はユーザーaとbが相互に友人を持っているかどうかを確認できるSQL Server 2008のビューを作成しようとしています。

use aとbは、 Friendships というテーブルに、送信者と受信者として、 IsPending 列に格納され、友人関係が受信者によって承認されたかどうかを示します。

とにかくメインテーブルは次のようなものです:

Sender | Recipient | IsPending
(Stored on a single row.)

HasMutual という余分な列を返すビューを作成するにはどうすればよいでしょうか?

ありがとう。

1
これを行うには、SELECT文をどのように記述しますか?シンプルを開始し、aとbの相互の友人がどのようなものかを示すSELECTを書く。そこから、それは簡単なはずです。
追加された 著者 Ben Thul,
あなたの試みを投稿してください...
追加された 著者 Mitch Wheat,

2 答え

私はこの質問を理解するのに賢明だったと思います!

私は最初の2つの答えがそれぞれ投票権を持っているとは思えません。 Ben Thulが主張しているようにこれは自明ではありません!

これは単一のクエリで解決することは非常に難しいので、別のアプローチを検討しますか?

一対のユーザーを取り込み、相互の友だちをリストするストアドプロシージャはありますか?

(私は、 IsPending = 1 は彼らがまだ友達ではないということを前提としています)

CREATE PROCEDURE find_mutual_friends
(
  @user1 varchar(255),
  @user2 varchar(255)
)
as 
SELECT
  Friends
FROM
(SELECT
  Friendships.Sender as Friends
FROM
  Friendships
WHERE
  Friendships.Recipient = @user1
  and Friendships.IsPending = 0
UNION ALL
SELECT
  Friendships.Recipient as Friends
FROM
  Friendships
WHERE
  Friendships.Sender = @user1
  and Friendships.IsPending = 0) FriendsTempTable
WHERE
  FriendsTempTable.Friends in
(SELECT
  Friendships.Sender as Friends
FROM
  Friendships
WHERE
  Friendships.Recipient = @user2
  and Friendships.IsPending = 0
UNION ALL
SELECT
  Friendships.Recipient as Friends
FROM
  Friendships
WHERE
  Friendships.Sender = @user2
  and Friendships.IsPending = 0)
1
追加された
ご回答有難うございます。私はすでに相互の友人のリストを返すメソッドを持っています。しかし、私の考えは、そのメソッドを使用する前にHasMutualがtrueであるかどうかをチェックしたいと思います。そのリストをフェッチできます。
追加された 著者 user1027620,
私はあなたが何を意味するのか見ていますが、とにかくパフォーマンスの低下につながります。通常、あなたは2人の人物(Facebookなど)のコンテキストのみを処理しているので、リストが返された場合はリストをフェッチし、その後は友人がいない場合は友人をリストします。このビューは、追加のデータベースクエリです。
追加された 著者 JohnB,
CREATE VIEW ViewName
AS

SELECT
        Sender , Recipient , IsPending, IsPending AS HasMutual
FROM    myTable
0
追加された