Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Google BigQuery,我在使用';不必要的';功能_Sql_Null_Google Bigquery_Unnest - Fatal编程技术网

Sql Google BigQuery,我在使用';不必要的';功能

Sql Google BigQuery,我在使用';不必要的';功能,sql,null,google-bigquery,unnest,Sql,Null,Google Bigquery,Unnest,当我执行这段代码时,我期望得到如下结果 #StandardSQL WITH tableA AS ( SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id UNION ALL SELECT ["T008", "T009"] AS T_id, NULL AS L_id ) SELECT * FROM tableA, UNNEST(L_id) AS unnest 但我得到的结果是: RowNumber T-id L-

当我执行这段代码时,我期望得到如下结果

#StandardSQL
WITH tableA AS (
SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id
UNION ALL
SELECT ["T008", "T009"] AS T_id, NULL AS L_id
)

SELECT * FROM tableA, UNNEST(L_id) AS unnest
但我得到的结果是:

RowNumber  T-id            L-id  unnest
1          T001,T002,T003  1,5   1
2          T001,T002,T003  1,5   5
3          T004,T005       NULL  NULL
我输了第三排。 然后,我看到了谷歌的官方文档,其中说明了以下内容:

RowNumber  T-id            L-id  unnest
1          T001,T002,T003  1,5   1
2          T001,T002,T003  1,5   5
但我不想丢失我的空行

如何保持空行


请告诉我解决方案…

使用左连接代替交叉连接。对于空数组,这将返回一个带有null的行。您可能还对文档中的内容感兴趣

UNNEST treats NULL as follows.
 ・NULL and empty ARRAY generate zero rows.
 ・An ARRAY containing NULL generates a row containing a NULL value.

你好,Elliott,看起来关键字
unnest
已保留,收到消息“Unexpected keyword unnest”。也许它需要用`标志或被称为“unnest”.谢谢你,Elliott!!我只是照你说的做,我可以得到我想要的结果。@ElliottBrossard对不起,我还是不明白为什么左连接可以从最不重要的表中保留空值,而交叉连接却不能。如果UNNEST表中有一个空值,那么应该仍然有空值,对吗?这与左连接t1和t2相同,其中t1为空,t2有一个空值。取消测试空数组或空数组将返回一个没有行的表。@ElliottBrossard,在左联接中,它总是需要一个联接条件。但是在UNNEST函数中,我们没有给出任何连接条件,它仍然返回结果。可以解释UNNEST函数内部使用的默认连接条件是什么?
#StandardSQL
WITH tableA AS (
  SELECT ["T001", "T002", "T003"] AS T_id, [1, 5] AS L_id
  UNION ALL
  SELECT ["T008", "T009"] AS T_id, NULL AS L_id
)
SELECT * FROM tableA
LEFT JOIN UNNEST(L_id) AS value;