0

我正在尝试在https://data.stackexchange.com/stackoverflow查询 satckoverflow 数据

SELECT Id as postId, PostTypeId, OwnerUserID, AcceptedAnswerId from posts 
where PostTypeId = 1

将给我一个包含 50,000 个问题的列表和发布问题的用户的用户 ID (OwnerUserId) 和回答被接受的人的用户 ID (AcceptedAnswerId)。

现在我正在尝试编写一个查询来选择已询问或发布已接受答案的用户列表。像这样的东西:

Select Id, reputation from users 
INNER JOIN
(Select Id as postId, OwnerUserId, AcceptedAnswerId from posts)
ON
users.Id = posts.OwnerUserId or users.Id = posts.AcceptedAnswerId
4

3 回答 3

1

标题中问题的答案是:你可以用一个WITH子句来做到这一点。

简单的例子:

WITH query1 AS
(SELECT * FROM myTable),
query2 AS
(SELECT * FROM query1)
SELECT * FROM query2;

WITH子句极大地增强了复杂查询的可读性。

于 2014-05-17T09:01:47.347 回答
1

您不需要为此进行子选择。

SELECT u.Id, u.reputation, p.id as PostId, p.acceptedAnswerId
FROM users u
INNER JOIN posts p ON u.Id = p.OwnerUserId OR u.Id = p.AcceptedAnswerId
WHERE p.PostTypeId = 1

虽然这需要很长时间才能运行。我会添加一个约束,例如and p.LastEditDate > '01 Jan 2014'

于 2014-05-17T07:44:26.903 回答
0

对于更复杂的场景,您可以创建一个类似于查询中的临时表/视图。

您可以创建表,CREATE TABLE然后INSERT将一个查询的结果放入其中。之后,您可以SELECT在该表上执行标准。

于 2014-05-21T00:16:55.250 回答