Вы должны понимать, что перекрестное объединение неопубликованного массива с его родительской строкой не совсем выравнивает исходную таблицу.Он повторяет родительскую строку для каждой строки в массиве: в этом случае каждая информация о сеансе повторяется для каждого попадания: и сам массив попаданий!
Это означает, что для каждого попадания вы можете искать материал во всей сессиипотому что для каждого попадания доступны все попадания, потому что они тоже были повторены.
Вы обращаетесь к этому массиву повторных попаданий в своем предложении WHERE
.
Вместо написания подвыборав этом повторяющемся массиве вы хотите использовать недавно доступные перекрестно объединенные поля из этого массива, т.е. AND REGEXP_CONTAINS(hits.page.pagepath,r'dames')
В вашем случае это может быть немного запутанным, поскольку ваш псевдоним для сглаженных совпадений - это попадания какхорошо - возможно, вы захотите переименовать его во что-то другое, например h
, чтобы ваш НЕ рабочий запрос выглядел следующим образом
SELECT h.page.pagepath AS Page
FROM
`[projectid].[datasetid].ga_sessions_*` t, t.hits as h
WHERE
_TABLE_SUFFIX BETWEEN '20190123' AND '20190123'
AND (SELECT COUNT(*)>0 FROM t.hits h2 WHERE REGEXP_CONTAINS(h.page.pagepath,r'dames'))
Вы проверяете для каждой страницы, содержит ли весь сеанс страницу, выполняющуюваше состояние.
РАБОЧИЙ пример будет
SELECT h.page.pagepath AS Page
FROM
`[projectid].[datasetid].ga_sessions_*` t, t.hits as h
WHERE
_TABLE_SUFFIX BETWEEN '20190123' AND '20190123'
AND REGEXP_CONTAINS(h.page.pagepath,r'dames')