SQL - 加入3个表查询

问题描述 投票:-1回答:3

今天是个好日子,

这是我在stackoverflow上的第一篇文章。老实说,社区是伟大的,充满了知识。我通常会接受它,但直到今天我才决定注册一个帐户。我需要这个神奇社区的知识来进行小型快速连接查询。

由于一些奇怪的原因,我无法让它工作。

这是关系表:

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

显示来自用户ID 10遵循的所有用户的推文表的推文(包括用户ID 10本身)

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

所以我想输出鲍勃的推文,鲍勃跟随的每个人:贝尔和罗杰斯

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

编辑:

我很抱歉!以下是示例数据:

样本数据

enter image description here

再一次谢谢你 :)

mysql sql inner-join relationship jointable
3个回答
1
投票

没有样本数据,很难确定,但这个查询应该有效。它从表中选择与userID(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


0
投票

这将选择用户10和他跟随的任何人的推文文本。请注意,您需要将ID放在2个位置。

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

输出(userID,tweet):

3   tweet2
2   tweet3
1   tweet1

0
投票

这应该工作:

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
© www.soinside.com 2019 - 2024. All rights reserved.