堆栈交换数据资源管理器上的SQL-定义值

时间:2018-11-03 18:12:00

标签: sql dataexplorer

我是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”。如此一来,结果将返回指向用户实际个人资料的超链接,而不仅仅是给出一个数字?

1 个答案:

答案 0 :(得分:2)

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