Запрос SQL Server выбирает случайные строки с дополнительными связанными строками - PullRequest
0 голосов
/ 18 мая 2019

Я хочу получить 200 случайных строк SocialMedia_Question.Каждая строка SocialMedia_Question имеет связанные строки в SocialMedia_Answer.Content.В результате запроса я хочу увидеть 200 случайных SocialMedia_Question.id и другие столбцы, указанные в select.(Проблема в том, что каждый SocialMedia_Question.id имеет несколько номеров связанных SocialMedia_Answer.Content, в результате чего результат этого запроса содержит несколько строк для одного и того же вопроса .id)

Я пробовал выбирать top и RAND (), но не могне заставит это работать.Я не думаю, что просто выбрать топ 200 будет работать, потому что мне нужно 200 вопросов со всеми связанными с ними данными в результате.

select 
    SocialMedia_Question.id as QuestionID, 
    SocialMedia_Question.Content as Question,
    SocialMedia_Question.CreatedBy as IDQuestionCreator,
    SocialMedia_Question.LikeCount as QuestionLikeCount,
    SocialMedia_Answer.Content as comment, 
    SocialMedia_Answer.createdby as IDCommenter
from  
    SocialMedia_User 
inner join 
    SocialMedia_Question on SocialMedia_Question.CreatedBy = SocialMedia_user.Id 
left join 
    SocialMedia_answer on SocialMedia_Question.id = SocialMedia_answer.QuestionId 
left join 
    SocialMedia_UserDeactivate on SocialMedia_user.id = SocialMedia_UserDeactivate.userid
where 
    ((SocialMedia_UserDeactivate.userid is null)
     and (exists (select null from SocialMedia_Question 
                  where SocialMedia_answer.CreatedBy = SocialMedia_Question.CreatedBy))
    and (SocialMedia_Question.AnswerCount > 10))
order by  
    SocialMedia_user.Id, SocialMedia_Answer.CreatedOn

Я ожидаю 200 случайных SocialMedia_Question.id строк в результате запроса вдополнение ко всем другим столбцам, указанным в операторе выбора.Я действительно ценю вашу помощь!

1 Ответ

0 голосов
/ 18 мая 2019

Вы можете заказать набор по NEWID() и выбрать TOP 200 из SocialMedia_Question:

 select
    SocialMedia_Question.id as QuestionID, 
    SocialMedia_Question.Content as Question,
    SocialMedia_Question.CreatedBy as IDQuestionCreator,
    SocialMedia_Question.LikeCount as QuestionLikeCount,
    SocialMedia_Answer.Content as comment, 
    SocialMedia_Answer.createdby as IDCommenter
from  
    SocialMedia_User 
inner join 
    (select top 200 * FROM SocialMedia_Question order by NEWID()) AS SocialMedia_Question on SocialMedia_Question.CreatedBy = SocialMedia_user.Id 
left join 
    SocialMedia_answer on SocialMedia_Question.id = SocialMedia_answer.QuestionId 
left join 
    SocialMedia_UserDeactivate on SocialMedia_user.id = SocialMedia_UserDeactivate.userid
where 
    ((SocialMedia_UserDeactivate.userid is null)
     and (exists (select null from SocialMedia_Question 
                  where SocialMedia_answer.CreatedBy = SocialMedia_Question.CreatedBy))
    and (SocialMedia_Question.AnswerCount > 10))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...