Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 不能在Bigquery中的union上使用NULL列_Sql_Google Cloud Platform_Google Bigquery_Sqldatatypes - Fatal编程技术网

Sql 不能在Bigquery中的union上使用NULL列

Sql 不能在Bigquery中的union上使用NULL列,sql,google-cloud-platform,google-bigquery,sqldatatypes,Sql,Google Cloud Platform,Google Bigquery,Sqldatatypes,我正在工作中构建动态sql生成器,在处理联合查询时遇到困难。 当我运行以下查询时: SELECT NULL AS field; 默认情况下,列类型为BOOL,可用于与整数类型列的并集,如下所示: SELECT field FROM (SELECT 21 AS field), (SELECT NULL AS field) 这将返回成功的结果。 但当我在一个子查询上运行字符串类型的类似查询时,它失败了 以下是查询失败,原因是无法联合表:类型不兼容。”字段“:字符串“字段”:B

我正在工作中构建动态sql生成器,在处理联合查询时遇到困难。 当我运行以下查询时:

SELECT NULL AS field;
默认情况下,列类型为
BOOL
,可用于与整数类型列的并集,如下所示:

SELECT  field
FROM 
    (SELECT 21 AS field),
    (SELECT NULL AS field)
这将返回成功的结果。 但当我在一个子查询上运行字符串类型的类似查询时,它失败了 以下是查询失败,原因是无法联合表:类型不兼容。”字段“:字符串“字段”:BOOL

SELECT  field
FROM
    (SELECT 'hello' AS field),
    (SELECT NULL AS field)

推断类型和强制转换空值的最佳方法是什么。我的sql生成器应该可以处理union上的几种数据类型,我认为null可以用于所有类型。如果null不能与字符串和其他类型一起使用,是否有任何“超级”类型可用于替换null字段

BigQuery为
NULL
值分配一个类型,默认情况下为整数。要获取字符串
NULL
,请转换:

cast(null as string)
我不知道生成器是如何工作的,但您可以安排一个查询,该查询引用一个正确铸造的值:

with params as (
      select cast(null as string) as null_str
     )
select null_str
from params cross join
     . . .

BigQuery为
NULL
值分配一个类型,默认情况下为整数。要获取字符串
NULL
,请转换:

cast(null as string)
我不知道生成器是如何工作的,但您可以安排一个查询,该查询引用一个正确铸造的值:

with params as (
      select cast(null as string) as null_str
     )
select null_str
from params cross join
     . . .

强制转换(null作为desireddatatyp)?所需的数据类型可以是任何类型。在生成sql时,我找不到要强制转换为null的所有列的类型)。即使是null值也必须具有指定的数据类型,无论是显式的还是隐式的。我不熟悉BigQuery,但这就是用该语言编写
UNION
语句的实际方式吗?这似乎更像是一种较旧的逗号语法
JOIN
,而不是
UNION
。无论如何,如果您可以
CAST
转换
NULL
值,那么就这样做。我不确定它怎么可能是“任何”数据类型。有些不应该互相兼容。编辑:如果数据中有
string
s,
CAST()
field值都作为
string
类型。@Shawn我忘了提到这是一种旧式sql,其中逗号分隔的子查询可以用作union。数据类型可以根据用户输入的不同而有所不同,用户输入的数据说明了要从哪些表和列中进行选择。强制转换(null为desireddatatyp)?所需的数据类型可以是任何类型。在生成sql时,我找不到要强制转换为null的所有列的类型)。即使是null值也必须具有指定的数据类型,无论是显式的还是隐式的。我不熟悉BigQuery,但这就是用该语言编写
UNION
语句的实际方式吗?这似乎更像是一种较旧的逗号语法
JOIN
,而不是
UNION
。无论如何,如果您可以
CAST
转换
NULL
值,那么就这样做。我不确定它怎么可能是“任何”数据类型。有些不应该互相兼容。编辑:如果数据中有
string
s,
CAST()
field值都作为
string
类型。@Shawn我忘了提到这是一种旧式sql,其中逗号分隔的子查询可以用作union。数据类型可以根据用户输入的不同而有所不同,用户输入说明了要从中选择的表和列。