我正在尝试使用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_id
和c.hosp_id
。同样,我也想删除b.person_id
列。
执行上述查询时,出现如下所示的语法错误
Syntax error: Expected ")" or "," but got "." at [9:19]
请注意,我在Except
子句中使用的所有列都在所使用的表中。其他信息是所有使用的表都是使用with
子句创建的临时表。当我通过选择感兴趣的列手动进行相同操作时,它可以正常工作。但是我有几列,无法手动完成。
可以帮忙吗?我正在尝试学习Bigquery。您的输入会有所帮助
答案 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投影重复的列。