SQL - объединение 3-х табличных запросов - PullRequest
0 голосов
/ 22 февраля 2019

Всем доброго времени суток,

Это мой первый пост на stackoverflow.Честно говоря, сообщество великое и полное знаний.Я обычно вхожу в это, но никогда не делал никаких сообщений, пока сегодня я решил зарегистрировать учетную запись.Мне нужно знание этого удивительного сообщества для небольшого запроса быстрого объединения.

По какой-то странной причине я не могу заставить его работать.

Вот таблица отношений:

Click here to view the relationship between tables

То, что я пытаюсь вывести (в этом примере я буду использовать userID 10):

Показать твит из таблицы Tweet всех пользователей, за которыми следует userID 10 (включая самого userID 10)

Другими словами: предположим, что userID 10 называется Бобом, а Боб следует за Беллом и Роджерсом.

Так что я хотел бы вывести твит Боба и каждого Бобаследует: Белл и Роджерс

Заранее благодарю за помощь и время :)

РЕДАКТИРОВАТЬ:

Мои извинения!Вот пример данных:

Пример данных

enter image description here

Еще раз спасибо:)

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Это выберет текст твита пользователя 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, твит):

3   tweet2
2   tweet3
1   tweet1
0 голосов
/ 22 февраля 2019

Это должно работать:

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
0 голосов
/ 22 февраля 2019

Без примеров данных трудно быть уверенным, но этот запрос должен работать.Он выбирает все твиты из таблицы, которые соответствуют идентификатору пользователя (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!

Демо на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...