如何在Bigquery中使用Except子句?

时间:2019-08-25 04:42:37

标签: sql google-bigquery bigquery-standard-sql python-bigquery

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

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。您的输入会有所帮助

2 个答案:

答案 0 :(得分:2)

我按表使用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

答案 1 :(得分:1)

尝试以下方法:

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

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