2014-09-12 63 views
5

我一直在试图解决这个错误小时,没有任何运气,它对我已经没有问题,运行了几个星期,但突然我看到这个错误的查询:的BigQuery JOIN错误

Error: ON clause must be AND of = comparisons of one field name from each table, with all field names prefixed with table name.

查询的格式如下:

SELECT S.av AS av, S.dm AS dm, t, gn 
FROM [dataset.cTable] 
JOIN EACH (SELECT id, av, dm FROM [dataset.sTable]) AS S ON S.id = sid 
AND (t == 'type1' OR t == 'type2') GROUP EACH BY av, dm, t, gn; 

任何帮助将不胜感激。

+0

ON子句的AND部分未指定连接条件。将其更改为WHERE。 – antlersoft 2014-09-12 22:17:48

回答

2

(t == 'type1' OR t == 'type2')子句不是连接条件,它是where条件。如果您将您的查询更改为:

SELECT S.av AS av, S.dm AS dm, C.t, C.gn 
FROM [dataset.cTable] C 
JOIN EACH (SELECT id, av, dm FROM [dataset.sTable]) AS S ON S.id = sid 
WHERE (C.t == 'type1' OR C.t == 'type2') GROUP EACH BY S.av, S.dm, C.t, C.gn; 

它应该工作。

+0

感谢将AND更改为WHERE修复它。 – 2014-09-12 22:58:16

0

假定在别名中添加可以解决问题。我也并不认为子查询是必要的:

SELECT S.av AS av, S.dm AS dm, c.t, c.gn 
FROM [dataset.cTable] as c JOIN EACH 
    [dataset.sTable] AS S 
    ON S.id = c.sid 
WHERE c.t in ('type1', 'type2') 
GROUP EACH BY av, dm, t, gn; 

each可能不是必要的,但我不是过于熟悉谷歌的BigQuery。

+0

刚刚尝试过,没有运气。我猜它是一个BigQuery问题......感谢您的建议 – 2014-09-12 22:34:52