如何使用父键从连接表中检索所有数据

时间:2013-11-01 18:03:12

标签: .net sql sql-server

我正在开发类似app的应用程序。在此应用中,用户将有其他用户作为关注者,他们可以看到关注者帖子。我有以下表格:

enter image description here

根据设计,用户可以拥有其他用户作为关注者(有点像一元关系)。我想写一个sql语句来检索所有关注者帖子+我的帖子(用户名,poststatus)。

我尝试了不同的sql语句,但没有返回我需要的正确数据。例如:

    SELECT f.FirstName, f.LastName, up.PostStatus FROM UserPosts up 
    Inner join  (
          SELECT f.UserID,f.FollowerID, u.FirstName, u.LastName 
          from Followers f INNER JOIN Users u on  f.UserID = u.UserID 
          WHERE f.UserID = 1) as f 
   ON up.UserID = f.FollowerID 
   OR up.UserID=f.UserID

此查询会返回所有关注者帖子,但不会返回正确的关注者用户名,而是返回用户1的用户名。

5 个答案:

答案 0 :(得分:1)

select u.FirstName, u.LastName, up.PostStatus
from UserPosts as up
    inner join Users as u on u.UserID = up.UserID
where
    up.UserID = @UserID or
    exists (
        select *
        from Followers as f
        where f.FollowerID = up.UserID and f.UserID = @UserID
    )

答案 1 :(得分:1)

以下内容为您提供 a)用户1帖子 b)来自用户1的任何人的帖子。

SELECT p.*
FROM posts p
WHERE userID = 1
UNION ALL
SELECT pf.*
FROM posts pf
JOIN followers f
ON pf.userID = f.followerID
WHERE f.userID = 1

答案 2 :(得分:0)

您的子查询中的内部联接是否应指向F.userid或F.FollowerID?

答案 3 :(得分:0)

在你内心的INNER JOIN中,你陈述WHERE f.UserID = 1。这似乎将您的结果限制在第一个追随者身上。

答案 4 :(得分:0)

我想是这样的

SELECT p.postStatus, p.firstname, p.lastname FROM Post p
INNER JOIN Follows f ON f.followerID=p.UserID AND f.UserID={user id you are selecting}
INNER JOIN Users u ON f.followeID=u.UserID
相关问题