int id = 1;
string chain = "(";
SqlDataReader dr = SqlHelper.ExecuteReader(string.Format("SELECT a.Id as x, c.Id as y From Friends b INNER JOIN Users a ON b.SenderId = a.Id INNER JOIN Users c ON b.ReceiverId = c.Id WHERE (c.Id = {0} OR a.Id = {0}) AND State = '{1}'", id, "ok"));
if (dr.HasRows)
while (dr.Read())
if (id == int.Parse(dr["y"].ToString()))
chain += dr["x"].ToString() + ", ";
else
chain += dr["y"].ToString() + ", ";
if (chain.Length > 1)
chain = chain.Substring(0, chain.Length - 2) + ")";
else
chain = "(0)";
// Chain has for example => (2, 3, 4, 5) => which are the Ids for Users's Friends
string str = "SELECT TOP 20 a.*, b.UserName as Sender, c.UserName as Receiver, b.Avatar as SenderPic";
str += " FROM Events a INNER JOIN Users b ON a.SenderId = b.Id INNER JOIN Users c ON a.ReceiverId = c.Id ";
str += "WHERE SenderId IN ";
str += chain;
str += " OR ReceiverId IN";
str += chain;
str += " Order BY Id desc";
dr = SqlHelper.ExecuteReader(str);
chain
認爲是用戶的朋友。 有沒有人知道如何用JOINS執行這個查詢!?非常感謝。幫助嵌套查詢!
我認爲你應該刪除C#代碼,並將涉及的SQL的問題重新說明。包含一些關於模式的更多信息。這可能會給你更多的答案。 – driis 2010-07-25 08:51:33
很難弄清楚你真正感興趣的東西。發佈的代碼樣本非常混亂,很難理解。如果您想知道如何將帶有WHERE SenderId IN(....)的SQL查詢轉換爲帶JOIN的查詢,那麼請給我們看看這個SQL查詢 - 而不是生成它的C#代碼... ....你讓它不必要的困難和困難讓人們回答你..... – 2010-07-25 08:53:45
第一個查詢中匹配的「ReceiverId」是否應該符合第二個匹配「SenderId」的條件? – 2010-07-25 09:07:58