我是Stack Overflow的新手,并且是一个非常新手的编码人员。我正在使用this tutorial来学习如何编写查询来搜索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”。如此一来,结果将返回指向用户实际个人资料的超链接,而不仅仅是给出一个数字?
答案 0 :(得分:2)
'a'表示帖子,通过将其与表示为'p'的帖子以及AcceptedAnswerId结合起来,您的数据集将仅使用AcceptedAnswers进行过滤。这也称为自我连接,这里'p'包含提出问题的用户信息,'a'包含答复者的信息,当'u'包含用户信息的表的别名与'ownerid'连接时p”,以便它返回询问者的用户信息,类似地,再次将用户表用作“ au”来检索应答者信息。