3

我是 Stack Overflow 的新手,并且是一个非常新手的编码器。我正在使用本教程来学习如何编写查询来搜索Stack Exchange Data Explorer

我正在看这行代码:

SELECT p.Title, p.Id, p.Score, a.Score AS "Accepted Score", 
u.DisplayName AS "Asker", au.DisplayName AS "Answerer"

FROM Posts p
JOIN Posts a ON p.AcceptedAnswerId = a.Id
JOIN Users u ON p.OwnerUserId = u.Id
JOIN Users au ON a.OwnerUserId = au.Id
WHERE p.PostTypeId = 1
AND p.Score >= 25
and p.AcceptedAnswerId IS NOT NULL
ORDER BY p.Score DESC

...我想确保我理解它。我有点卡住的部分是:

JOIN Posts a ON p.AcceptedAnswerId = a.Id
JOIN Users u ON p.OwnerUserId = u.Id
JOIN Users au ON a.OwnerUserId = au.Id

我是否正确(1)我们本质上是在定义“a”、“u”和“au”,以及(2)“a”代表帖子的所有用户 ID,它们有一个可接受的答案(3)“u”表示出现在帖子和用户配置文件中的用户 ID (4),“au”表示答案帖子和用户的横截面?

我想我很困惑为什么你需要在这里定义“u”。是不是结果会返回一个指向用户实际个人资料的超链接,而不仅仅是给出一个数字?

4

1 回答 1

2

'a' 代表帖子,通过将其与以“p”表示的帖子以及 AcceptedAnswerId 一起加入,您的数据集将仅使用 AcceptedAnswers 进行过滤。这也称为自我加入,此处“p”包含提出问题的用户信息,“a”包含回答者的信息,当“u”包含用户信息的表的别名与“的 ownerid”连接时p' 以便它返回提问者的用户信息,同样,用户表再次用作“au”来检索回答者信息。

于 2018-11-03T18:34:31.773 回答