在Bigquery中每次左下角都会丢失行

时间:2015-10-23 09:43:52

标签: google-bigquery

我有三个表:abc

为简单起见,在这个例子中,它们都只有一列,一个id列。这些ID永远不会NULL

现在我加入所有三个表:

SELECT * FROM 
a
LEFT JOIN EACH b
ON a.id = b.id
LEFT JOIN EACH c
ON b.id = a.id

现在出现问题:

b不包含所有' ID'来自a,因此会出现一些NULL - 值, 当我加入c时,会删除包含这些NULL - 值的行!根据我的理解,LEFT JOIN不应该删除行,而只添加新的行,对吧?

示例:

a: id = [1,2]
b: id = [1]
c: id = [1]

Bigquery会返回

row1: 1,1,1

我的预期结果:

row1: 1,1,1
row4: 2,NULL, NULL

有没有办法在BigQuery中获得预期的行为?

更新:

感谢@Felipe和@oulenz的输入,我现在已经测试过了:

select *
from (select 1 as id) a
left outer join (select 2 as id) b
  on b.id = a.id
left outer join (select 2 as id) c
  on c.id = b.id

这会产生我预期的结果1,null,null并且不会重现我的问题。

我将不得不进一步调查问题所在。到目前为止你的输入是什么!

2 个答案:

答案 0 :(得分:2)

这个问题有点过时了。当时,这个问题反映了BigQuery SQL查询在内部如何翻译的问题。此问题已在BigQuery public issue tracker issue 35905407上公开跟踪(从Google代码迁移到问题跟踪器),并已修复。

自从采用Stadard SQL以来,不再推荐使用EACH,而是Legacy SQL的一部分,其中Big Query正在逐渐消失。如果此问题仍然影响到您,我建议您删除之前答案/评论中提到的EACH修饰符,或者考虑rewriting the query to conform to Standard SQL

答案 1 :(得分:0)

我测试了你要求的东西,它的工作方式与预期的一样:

SELECT a.x, b.x, c.x
FROM (
  SELECT x FROM (SELECT 1 x), (SELECT 2 x)
) a
LEFT JOIN (
  SELECT 1 x
) b
ON a.x=b.x
LEFT JOIN (
  SELECT 1 x
) c
ON a.x=c.x

enter image description here