GBQ SQL:如果在表中找不到记录,则返回空格

时间:2018-02-18 05:34:35

标签: sql google-bigquery

我有一个查询如下。如果在表中找不到密钥,我希望SQL返回空格。

从table_A中选择*,其中键入(1,2,3,4)

Output:
1   x   y

2   a   b

'' ''  ''

4   ds  c

假设table_A有3列,而键3记录在表

1 个答案:

答案 0 :(得分:1)

您应该使用NULL值代替空字符串,以确保类型安全。 NULL表示与空字符串或零相比,没有值存在,而空字符串或零仍然是某种类型的值。 如果你想使用空字符串,你必须将键转换为运行中的字符串 - 不太方便。

获得结果的技巧是创建一个包含所有键的理想键表 - 我在这里使用generate_array从1到最大(键)。然后离开你的桌子吧,瞧:

WITH test AS (SELECT * FROM UNNEST([
  STRUCT(1 AS key, 'x' AS col1, 'y' AS col2), 
  STRUCT(2 AS key, 'a' AS col1, 'b' AS col2), 
  STRUCT(4 AS key, 'x' AS col1, 'y' AS col2)
  ])
  )

SELECT 
 test.*
FROM UNNEST(GENERATE_ARRAY(1, (SELECT MAX(key) FROM test))) AS key
LEFT JOIN test USING(key)

给你

result

如果您想要所有密钥,只需SELECT * FROM ...