2011-11-25 39 views
-1

我想創建一個視圖與SQL Server 2008,可以使我看到如果用戶a和b有共同的朋友。SQL Server 2008 - 使用額外的列'HasMutual'創建視圖

將使用a和b存儲在名爲Friendships的表中作爲發件人和收件人,其中IsPending列指示友誼是否已被接受方批准。

但無論如何,主表是這樣的:

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

我怎樣才能創建一個0,如果虛假或1如果爲true返回稱爲HasMutual的額外列的看法?

謝謝。

+3

發表您的嘗試,請... –

+0

你怎麼會寫SELECT語句來做到這一點?開始簡單並寫一個SELECT,顯示哪些共同朋友a和b有。從那裏,它應該是微不足道的。 –

回答

1

我希望我足夠聰明地弄清楚這個查詢!

我不相信前兩個答案每個都得到了贊成票。這不是本·圖爾宣稱的那樣微不足道!

由於這很難用單個查詢來解決,您會考慮採用不同的方法嗎?

如何獲取一對用戶的存儲過程,然後列出他們的共同朋友?

(我假設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) 
+0

感謝您的回答。我已經有一個方法返回一個共同朋友列表。但我的整個想法是在使用該方法之前,我想檢查HasMutual是否爲真,然後我可以獲取該列表。 – user1027620

+0

我明白你的意思了,但無論如何這將會帶來性能上的損失。通常,你只處理兩個人(即Facebook)的上下文,所以只要獲取列表,如果行返回= 0,那麼他們沒有共同的朋友,否則列出朋友。該視圖將是一個額外的數據庫查詢。 – JohnB

0
CREATE VIEW ViewName 
AS 

SELECT 
     Sender , Recipient , IsPending, IsPending AS HasMutual 
FROM myTable 
相關問題