Sql 如何获取所有用户';职位';堆栈交换数据资源管理器中的标记(包括应答和#x27;s标记)?
我在(SEDE)中使用查询 这是: 在上面的代码中,堆栈溢出中的帖子有两种类型:问答。问题(Sql 如何获取所有用户';职位';堆栈交换数据资源管理器中的标记(包括应答和#x27;s标记)?,sql,sql-server,sql-server-2017,dataexplorer,Sql,Sql Server,Sql Server 2017,Dataexplorer,我在(SEDE)中使用查询 这是: 在上面的代码中,堆栈溢出中的帖子有两种类型:问答。问题(PostTypeId在数据库架构中为1)有标记,但答案(PostTypeId在数据库架构中为2)没有标记。 答案属于通过ParentId的问题 但我上面的查询效率太低了,我只能得到一些(使用用户id)帖子的标签 如何在SEDE超时时间内获取所有用户的帖子标签?以下几点: 您无法获取所有用户的帖子标签。当前,和 因此,您需要:(A)以某种方式限制结果,或者(B)41m个帖子,每次50K(不推荐),或者(C)
PostTypeId
在数据库架构中为1)有标记,但答案(PostTypeId
在数据库架构中为2)没有标记。
答案属于通过ParentId
的问题
但我上面的查询效率太低了,我只能得到一些(使用用户id)帖子的标签
如何在SEDE超时时间内获取所有用户的帖子标签?以下几点:
Users
表中提取ID以外的任何内容,则不要包括该表。它会破坏循环和帖子。OwnerUserId
是一样的东西UNION
语句(在这种情况下)UNION
语句,请尽可能使用UNION ALL
(在本例中)。这样可以避免发动机重复检查WHERE
子句时
但是,如果你可以限制,比如说,用户在手;你得到了一个平衡:
(此查询指向用户id。)
请注意,只有前10名用户的帖子超过了50K篇
SELECT A.Id
, A.PostTypeId
, A.Title
, A.Body
, A.ParentId
, A.Tags
, A.CreationDate
FROM posts A
LEFT JOIN users U
ON A.OwnerUserId = U.id
WHERE U.Id = ##UserId##
AND A.PostTypeId = 1
UNION
SELECT A.Id
, A.PostTypeId
, A.Title
, A.Body
, A.ParentId
, B.Tags
, A.CreationDate
FROM posts A
LEFT JOIN users U
ON A.OwnerUserId = U.id
RIGHT JOIN posts B
ON A.ParentId = B.Id
WHERE U.Id = ##UserId##
AND A.PostTypeId = 2
SELECT TOP 50000
p.OwnerUserId AS [User]
, p.Id AS [Post Id]
, CASE WHEN p.PostTypeId = 1 THEN 'Q' ELSE 'A' END AS [Type]
, COALESCE (p.Title, ownr.Title) AS [Title]
, p.Body
, COALESCE (p.Tags, ownr.Tags) AS [Tags]
, p.CreationDate
FROM Posts p
LEFT JOIN Posts ownr ON ownr.ID = p.ParentId
WHERE p.OwnerUserId = ##UserId##
AND p.PostTypeId IN (1, 2) -- Question, answer
ORDER BY p.OwnerUserId DESC, p.CreationDate
WITH usersOfInterest AS (
SELECT TOP 10
u.Id AS [UserId]
, u.DisplayName
FROM Users u
ORDER BY u.Reputation DESC
)
SELECT
[User] = 'site://u/' + CAST(u.UserId AS NVARCHAR) + '|' + CAST(u.UserId AS NVARCHAR)
, p.Id AS [Post Id]
, CASE WHEN p.PostTypeId = 1 THEN 'Q' ELSE 'A' END AS [Type]
, COALESCE (p.Title, ownr.Title) AS [Title]
, p.Body
, COALESCE (p.Tags, ownr.Tags) AS [Tags]
, p.CreationDate
FROM usersOfInterest u
INNER JOIN Posts p ON u.UserId = p.OwnerUserId
LEFT JOIN Posts ownr ON ownr.Id = p.ParentId
WHERE p.PostTypeId IN (1, 2) -- Question, answer
ORDER BY u.UserId DESC, p.CreationDate