BigQuery - CASE WHEN x IN(来自其他表的字段),导致半连接错误
Posted
技术标签:
【中文标题】BigQuery - CASE WHEN x IN(来自其他表的字段),导致半连接错误【英文标题】:BigQuery - CASE WHEN x IN (field from other table), results in Semijoin error 【发布时间】:2017-12-08 00:41:42 【问题描述】:我正在尝试根据网站访问者之前是否曾向我们购买过产品来细分他们。当我在 SELECT 语句中输入以下字段时,我得到以下错误:
CASE WHEN fullVisitorId IN (SELECT fullVisitorId FROM [xxxx-0000:36363.unique_FullVisitorIds_of_past_purchasers_table]) THEN "Purchased"
ELSE "Never Purchased" END AS Previous_Purchase
错误:“错误:(L10:20):半连接表达式(即“x IN (SELECT ...)”)仅在 WHERE 或 HAVING 子句中支持。”
我该怎么做呢?
谢谢
【问题讨论】:
您是否尝试过使用standard SQL,它对连接更灵活?如migration guide 中所述,您必须对语法进行一些更新,例如表名。 感谢您的信息。切换到标准 SQL 给我带来了一些其他问题,所以我刚刚使用了如下所述的连接。干杯。 你能解释一下是什么问题吗? 这是一个相当复杂的查询,切换到标准 sql 不知何故要求我取消嵌套 eCommerceAction 字段。 “错误:无法访问类型为 ARRAY我建议按照以下思路加入一个汇总结果:
SELECT
CASE WHEN p.has_purchased = 1 THEN "Purchased"
ELSE "Never Purchased"
END AS Previous_Purchase
FROM existing_from_table f
LEFT JOIN (
SELECT fullVisitorId, 1 has_purchased
FROM [xxxx-0000:36363.unique_FullVisitorIds_of_past_purchasers_table]
GROUP BY fullVisitorId
) p on f.fullVisitorId = p.fullVisitorId
nb:使用 group by 以便不影响总行数。
【讨论】:
以上是关于BigQuery - CASE WHEN x IN(来自其他表的字段),导致半连接错误的主要内容,如果未能解决你的问题,请参考以下文章