我们有一个动态UI查询构建器,它根据用户执行的操作构建BigQuery构造。查询就像(在单词中):
为了支持这种查询,我们最初使用嵌套的SELECT子句。例如,上面的第二个查询在SQL中看起来与此类似:
function mouseCallback(src, evnt)
handles = guidata(src);
% Get the current point
xyz = get(src, 'CurrentPoint');
x = xyz(1,1);
y = xyz(1,2);
% Store x/y here or whatever you need to do
end
到目前为止,此工作正常。现在,查询"用户查看了产品或添加到购物车"因为这个错误而无法正常工作 - Semijoin expression must be a part of logical AND。为了使OR条件有效,我们愿意采用UNION的路径。因此查询将是这样的:
SELECT email FROM users JOIN actions ON users.email = actions.user_id
WHERE email IN (SELECT email FROM users JOIN actions
ON users.email = actions.user_id
WHERE action = 'view_product')
AND action = 'add_product_to_cart'
问题是,如何支持AND和OR连词的组合?由于BigQuery中的UNION显然不能在WHERE子句中工作,我如何组合嵌套子查询? 具体来说,如何为上面的第三个项目符号点编写查询?
答案 0 :(得分:0)
确保use standard SQL。然后你可以这样做:
#standardSQL
SELECT email FROM users
WHERE (
SELECT
(COUNTIF(action = 'view_product') > 0 OR
COUNTIF(action = 'add_product_to_cart') > 0) AND
COUNTIF(action = 'placed_order') > 0
FROM actions
WHERE email = user_id
);
BigQuery的标准SQL方言比旧版SQL具有更少的限制,详见migration guide。