我想知道以下语法的含义,该语法取自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
,然后与另一个STRUCT进行比较-(12,34)
和(56,78)
与第二个示例相同
(Key1, Key2) IN ( SELECT (table.a, table.b) FROM table )
在第一个示例中,从选择语句与常量中“获取”了合格的结构
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句