Sql 如何在Bigquery中使用Except子句?

Sql 如何在Bigquery中使用Except子句?,sql,google-bigquery,bigquery-standard-sql,python-bigquery,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\u id列,因此我想删除重复的列,它们是b.hosp\u

我试图在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\u id
列,因此我想删除重复的列,它们是
b.hosp\u id
c.hosp\u id
。同样,我想删除
b.person\u id

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

Syntax error: Expected ")" or "," but got "." at [9:19]
请注意,除了子句之外,我在
中使用的所有列都出现在使用的表中。附加信息是所有使用的表都是使用
with
子句创建的临时表。当我通过选择感兴趣的列手动执行相同操作时,它工作得很好。但我有几个列,无法手动执行此操作

你能帮忙吗?我正在努力学习Bigquery。您的输入将有助于

尝试以下方法:

从中选择*除(人员id)
人a
内联医院b
使用(hosp_id)
内部连接读取c
使用(hosp_id)

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

我在每个表的基础上使用
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;
请注意,这还为表别名使用了有意义的缩写,这使查询更易于理解


在您的情况下,我认为您不需要
,除非您使用
USING
子句。

Hi,谢谢您的回复。我会试着投票。“路径”是指别名吗?我尝试在列中不使用别名(例如-我没有使用
c.reading_number
,而是使用了
reading_number
,它可以工作。bigquery可以自动识别所提到的列的源表吗?路径指的是
a.b
形式的东西,名称之间有一个点。很高兴知道这种方法。向上投票。谢谢。