我正在尝试在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
答案 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
。