В чем проблема
У меня очень большой список результатов. Я хочу отфильтровать свой запрос, чтобы включить только небольшой поднабор тех, которые основаны на самых популярных результатах в таблице.
Когда я помещаю свой подзапрос фильтрации в предложении WITH
, он не работает. Но если я положу это прямо в предложении WHERE, это сработает. Почему?
Я бы предпочел первое для ясности, но не могу заставить его работать.
Я работаю в BigQuery со стандартным SQL.
Пример
WITH
most_common AS (
SELECT
page
FROM
`mydataset`
LIMIT
100
)
SELECT
*
FROM
`mydataset`
WHERE
page IN most_common
Здесь я пытаюсь получить все результаты, где страница находится в первых 100 строках.
Возвращает следующую ошибку: - Syntax error: Expected "(" or keyword UNNEST but got identifier "most_common" at [12:12]
Однако, если я помещу подзапрос прямо туда, где он работает нормально.
SELECT
*
FROM
`mydataset`
WHERE
page IN (
SELECT
page
FROM
`mydataset`
LIMIT
100
)
Мое ограниченное понимание
Это говорит он хочет unnest, но unnest превращает массив в результат таблицы, так как подзапрос - это уже таблица.