通过使用struct构造函数语法,IN可以与多部分键一起使用吗?

时间:2018-07-03 17:59:17

标签: google-bigquery

我想知道以下https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#in-operators

中语法的含义
(Key1, Key2) IN ( (12,34), (56,78) )
(Key1, Key2) IN ( SELECT (table.a, table.b) FROM table )

当key1的值为12或34且key2的值为56或78时,显示的是行。我正确吗?如果不是简单的例子,将有助于理解。

1 个答案:

答案 0 :(得分:1)

考虑以下示例

#standardSQL
WITH t AS (
  SELECT 1 id, 12 key1, 13 key2 UNION ALL
  SELECT 2, 12, 34 UNION ALL
  SELECT 3, 56, 57 UNION ALL
  SELECT 4, 56, 78
)
SELECT * FROM t
WHERE (key1 = 12 AND key2 = 34)
OR (key1 = 56 AND key2 = 78)   

现在您可以按如下方式重新编写它

#standardSQL
WITH t AS (
  SELECT 1 id, 12 key1, 13 key2 UNION ALL
  SELECT 2, 12, 34 UNION ALL
  SELECT 3, 56, 57 UNION ALL
  SELECT 4, 56, 78
)
SELECT * FROM t
WHERE (key1, key2) IN ((12,34),(56,78)) 

这使它(取决于用户的偏好)更具可读性

在两种情况下输出均为

Row id  key1    key2     
1   2   12      34   
2   4   56      78     

语法(key1, key2)将这两个值组合成一个STRUCT,然后与另一个STRUCT(即(12,34)(56,78))进行比较

与第二个示例相同

(Key1, Key2) IN ( SELECT (table.a, table.b) FROM table )

与第一个示例一样,从选择语句与常量中“获取”了合格的结构