Tsql 如何使用一个查询的结果组合另一个查询?

Tsql 如何使用一个查询的结果组合另一个查询?,tsql,dataexplorer,Tsql,Dataexplorer,我正在尝试在以下位置查询satckoverflow数据: 将给我一个50000个问题的列表,以及发布问题的用户的用户Id(OwnerUserId)和被接受答案的用户Id(AcceptedAnswerId) 现在,我正在尝试编写一个查询,以选择已询问或发布接受答案的用户列表。 大概是这样的: Select Id, reputation from users INNER JOIN (Select Id as postId, OwnerUserId, AcceptedAnswerId from po

我正在尝试在以下位置查询satckoverflow数据:

将给我一个50000个问题的列表,以及发布问题的用户的用户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

你不需要一个子选择

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

虽然这需要很长时间才能完成。我想添加一个约束条件,如
和p.LastEditDate>“2014年1月1日”

标题中的问题的答案是:您可以使用
with
子句来实现这一点

简单的例子:

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

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

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

您可以使用
create table
创建表,然后
INSERT
将一个查询的结果插入其中。之后,您可以在该表上执行标准的
选择

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