如何使用一个查询的结果来撰写另一个查询?

时间:2014-05-17 07:37:17

标签: tsql dataexplorer

我正在尝试在http://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

3 个答案:

答案 0 :(得分: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'

之类的约束

答案 1 :(得分:1)

标题中问题的答案是:您可以使用WITH子句执行此操作。

琐碎的例子:

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

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

答案 2 :(得分:0)

对于更复杂的方案,您可以创建一个临时表/视图,如this查询中的那个。

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