如何在 SQL 中的动态列表上使用 IN 子查询?

Noa*_*son 1 sql google-bigquery

我正在 google Big Query 上进行查询,并尝试添加一个变量表,以便更轻松地更改我的查询选择的内容,但在进行查询时遇到以下错误:

Cannot execute IN subquery with uncomparable types INT64 and STRUCT<INT64, INT64>

查询为:

WITH vars AS (
  SELECT (3,6) as ids
)
SELECT id FROM users
WHERE id IN (SELECT ids FROM vars);
Run Code Online (Sandbox Code Playgroud)

这很令人困惑,因为我认为这正是IN子查询的用途。我不明白为什么该查询失败,而以下查询工作正常:

SELECT id FROM users
WHERE id IN (3,6);
Run Code Online (Sandbox Code Playgroud)

这里有什么问题,有解决办法吗?

Fel*_*ffa 5

我最喜欢/最简单的解决初始查询的方法:

WITH vars AS (
  SELECT [3,6] as ids
)
SELECT i FROM `fh-bigquery.public_dump.numbers_255` 
WHERE i IN UNNEST((SELECT ids FROM vars));
Run Code Online (Sandbox Code Playgroud)

秘密:

  • 在 vars 中,使用[]而不是()返回一个数组。
  • 在主查询中,请确保UNNEST().