BigQuery - оператор WITH - ссылка на предыдущий подзапрос в условии WHERE в более позднем подзапросе - PullRequest
0 голосов
/ 13 июня 2019

Обычно оператор WITH имеет следующую форму

WITH subQ1 AS (SELECT SchoolID FROM Roster),
     subQ2 AS (SELECT OpponentID FROM PlayerStats)
SELECT * FROM subQ1
UNION ALL
SELECT * FROM subQ2;

Теперь мне было интересно, можно ли сделать что-то подобное:

WITH
  relevant_ids AS (SELECT ids FROM table WHERE condition),
  actual_data AS (SELECT stuff FROM large_table WHERE id in relevant_ids)

Iзнаю, что я мог бы использовать первый запрос и поместить его непосредственно в условие where второго запроса, но я чувствую, что это не очень легко прочитать.

1 Ответ

2 голосов
/ 13 июня 2019

Чтобы конкретно обратиться к вашему второму запросу ...

WITH
  relevant_ids AS (SELECT id FROM table WHERE condition),
  actual_data AS (SELECT stuff FROM large_table WHERE id in (select id from relevant_ids))
SELECT * from actual_data

Код внутри CTE должен быть действительным SQL.

Однако рассмотрите возможность использования соединения.

WITH
  relevant_ids AS (SELECT id FROM table WHERE condition)
SELECT 
  large_table.stuff 
FROM large_table 
INNER JOIN relevant_ids USING(id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...