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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IN可以使用结构构造函数语法与多部分键一起使用吗?相关的知识,希望对你有一定的参考价值。

我想知道以下语法的含义,取自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时,含义显示行。我是否正确?如果不是简单的例子将有助于理解。

答案

考虑下面的例子

#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,然后与另一个STRUCTs进行比较 - (12,34)(56,78)

与第二个例子相同

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

从第一个示例中的select语句与常量“获取”合格的结构

以上是关于IN可以使用结构构造函数语法与多部分键一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 (this) 和 next() 修改函数,因此可以与多组元素一起使用

C ++中的结构构造函数?

与多处理和共享变量一起运行两个函数

由于 unordered_map 与 struct 作为键一起使用,显式默认的默认构造函数被隐式删除

与多处理一起使用时,PyTesseract 调用工作非常缓慢

[golang]语法基础之构造函数