3

我正在尝试使用ExceptBigquery 中的现有子句。请在下面找到我的查询

select * EXCEPT (b.hosp_id, b.person_id,c.hosp_id) from 
person a 
inner join hospital b
on a.hosp_id= b.hosp_id
inner join reading c
on a.hosp_id= c.hosp_id

如您所见,我正在使用 3 张桌子。所有 3 个表都有该hosp_id列,所以我想删除重复的列,即b.hosp_idc.hosp_id。同样,我也想删除b.person_id列。

当我执行上述查询时,我得到如下所示的语法错误

Syntax error: Expected ")" or "," but got "." at [9:19]

请注意,我在Except子句中使用的所有列都存在于使用的表中。附加信息是所有使用的表都是使用子句创建的临时表with。当我通过选择感兴趣的列手动执行相同操作时,它工作正常。但我有几列,无法手动执行此操作。

你能帮我吗?我正在尝试学习 Bigquery。您的意见会有所帮助

4

2 回答 2

5

EXCEPT在每个表的基础上使用:

select p.* EXCEPT (hosp_id, person_id),
       h.*,
       r.* EXCEPT (hosp_id)
from person p inner join
     hospital h
     on p.hosp_id = h.hosp_id inner join
     reading r
     on p.hosp_id = r.hosp_id;

请注意,这也对表别名使用有意义的缩写,这使得查询更易于理解。

EXCEPT就您而言,如果您使用该USING子句,我认为您根本不需要。

于 2019-08-25T12:02:45.780 回答
2

试试这个:

select * EXCEPT (person_id) from 
person a 
inner join hospital b
using (hosp_id)
inner join reading c
using (hosp_id)

您只能将列名(而不是路径)放在 EXCEPT 列表中,并且您可以简单地避免使用 USING 而不是 ON 来投影重复的列。

于 2019-08-25T06:14:16.103 回答