Как использовать результаты одного запроса для составления другого запроса?

Я пытаюсь запросить данные satckoverflow по адресу http://data.stackexchange.com/stackru

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

предоставит мне список из 50000 вопросов и идентификатор пользователя, который разместил вопрос (OwnerUserId), и идентификатор пользователя, ответ на который был принят (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 ответа

Решение

Ответ на вопрос в заголовке: вы можете сделать это с помощью WITH пункт.

Тривиальный пример:

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

WITH пункты значительно улучшают читаемость сложных запросов.

Вам не нужен отбор для этого.

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'

Для более сложных сценариев вы можете создать временную таблицу / представление, подобное приведенному в этом запросе.

Вы можете создать таблицу с CREATE TABLE а потом INSERT результаты одного запроса в него. После этого вы можете выполнить стандарт SELECT на этом столе.

Другие вопросы по тегам