NOT IN 不能在谷歌 BigQuery 标准 sql 中工作

jaa*_*lah 5 sql database google-bigquery

我正在使用 Google BigQuery,我试图从“table2”中查找“userid”,但不包括存储在“table1”中 2 次或更多次的用户 ID。这是代码:

#standardSQL
WITH t100 AS (
SELECT count_table.userid 
From(
SELECT userid,COUNT(`project.dataset.table1`.userid) as notification_count 
FROM `project.dataset.table1`
 GROUP BY userid) as count_table 
where notification_count >= 2 
)

SELECT userid FROM `project.dataset.table2` WHERE userid NOT IN (SELECT userid  FROM t100)
Run Code Online (Sandbox Code Playgroud)

问题是,这是从 'table1' 返回存储 2 次或更多次的 'userid's,我曾尝试添加WHERE userid IS NOT NULLSELECT userid FROM t100,但它没有任何区别。为了让一切都更清楚,这个 : SELECT userid FROM t100不是空的,并且由于某种原因返回的结果仍然显示在上面第一个代码的结果中。

Mik*_*ant 3

我尝试将 WHERE userid IS NOT NULL 添加到 SELECT userid FROM t100,但没有什么区别

这当然没有影响,因为当你COUNT(userid) as notification_count这样做时,它总是为 userid NULL 返回 0,因此被 If you would use COUNT(1) 过滤掉HAVING notification_count >= 2
- 这就是你可能在 t100 的输出中获得 null userid 的地方。所以userid is NULL这里绝对不是问题

正如其他人指出的那样 - 您的查询应该有效 - 所以如果您继续遇到问题 - 您需要在这个问题上进行更多挖掘并向我们提供更多详细信息

同时,尝试下面作为您的查询的另一个版本(否则看起来不错)

#standardSQL
WITH t100 AS (
  SELECT userid
  FROM `project.dataset.table1`
  GROUP BY userid
  HAVING COUNT(userid) >= 2 
)
SELECT userid
FROM `project.dataset.table2` AS t2
LEFT join t100 ON t100.userid = t2.userid
WHERE t100.userid IS NULL
Run Code Online (Sandbox Code Playgroud)