BigQuery-参数类型:INT64,STRING的运算符=没有匹配的签名

时间:2019-05-02 10:25:19

标签: sql google-cloud-platform google-bigquery

我从BQ收到一个奇怪的错误(也许是我第一次收到此错误)。

No matching signature for operator = for argument types: INT64, STRING. Supported signatures: ANY = ANY at [27:1]

查询:

SELECT col1
    ,col2
    ,col3
FROM tbl1
JOIN t2 ON t1.id = t2.id
JOIN t3 on t2.id = t3.id
JOIN t4 on t4.id = t1.id

错误行JOIN t2.id = t3.id t2.id 显示此错误。

它是一个整数列。

2 个答案:

答案 0 :(得分:2)

您的比较之一是混合类型。这是一个坏主意-如错误消息所示。您需要找出哪些对,然后执行以下操作之一:

cast(t2.id as string) = t3.id
t2.id = safe.cast(t3.id as int64)

答案 1 :(得分:-1)

在查询中,您使用t2表创建了联接,但是在联接中未给出t3t4表名。以下是正确的查询。

SELECT col1
    ,col2
    ,col3
FROM tbl1 as t1
JOIN t2 ON t1.id = t2.id
JOIN t3 ON t2.id = t3.id
JOIN t4 ON t4.id = t1.id

尝试一下。我认为这会起作用。

编辑后

您需要在某些字段中为表名加上字段,例如

select 
    t1.field1, 
    t2.field1, 
    t3.field3, 
    t4.field 
From tbl1 as t1
JOIN t2 ON t1.id = t2.id
JOIN t3 ON t2.id = t3.id
JOIN t4 ON t4.id = t1.id