SQL - 加入 3 table 查询

SQL - Joining 3 table query

大家好,

这是我在 Whosebug 上的第一个 post。老实说,这个社区很棒,知识渊博。我通常会使用它,但直到今天我决定注册一个帐户之前,我从来没有做过任何 post。我需要这个了不起的社区的知识才能进行小型快速加入查询。

出于某种奇怪的原因,我无法让它工作。

关系如下table:

我要输出的内容(在本例中我将使用用户 ID 10):

显示用户ID 10关注的所有用户的推文table中的推文(包括用户ID 10本身)

换句话说:假设用户 ID 10 称为 Bob,Bob 跟随 Bell 和 Rogers。

所以我想输出 Bob 的推文,以及 Bob 关注的所有人:Bell 和 Rogers

提前感谢您的帮助和时间:)

编辑:

对不起!这是示例数据:

示例数据

再次感谢您:)

没有样本数据很难确定,但这个查询应该有效。它从 table 中选择与用户 ID (1) 或该用户关注的任何人匹配的所有推文:

SELECT DISTINCT t.*
FROM User u
JOIN Follow f ON f.follower = u.userID
LEFT JOIN Tweet t ON t.userID = u.userID OR t.userID = f.following
WHERE u.userID = 1

输出(对于您的样本数据)

tweetID     userID  tweet
1           1       Hello
2           4       Hey
3           1       Hi Folks!
6           4       Something
7           3       Heya!

Demo on dbfiddle

这将 select 用户 10 和他关注的任何人的推文。 注意2处需要放ID。

SELECT t.userID, t.tweet FROM Tweet t
INNER JOIN
(SELECT following FROM Follow WHERE follower=10) uf
ON t.userID=uf.following
UNION
SELECT ut.userID, ut.tweet FROM Tweet ut
WHERE ut.userID=10

输出(用户 ID,推文):

3   tweet2
2   tweet3
1   tweet1

这应该有效:

select t.tweet
from tweet t inner join  
                  (select b.userid,a.following
                   from follow a inner join users b
                   on a.follower = b.userid) u 
on t.userid = u.following
where u.userid = 1 or t.userid = 1
order by t.date,tweet