Как использовать результаты одного запроса для составления другого запроса?
Я пытаюсь запросить данные 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
на этом столе.