Google bigquery 大查询:带列前缀的SQL联接

Google bigquery 大查询:带列前缀的SQL联接,google-bigquery,Google Bigquery,我在Google Big Query中有两个表。一个表是一种产品目录(1:1),而第二个表是与产品相关的信息(1:n)。对于一个问题,我将两者都加入。但是联接失败,因为两个表中都存在列pid和其他一些列 #standardSQL SELECT tbl1.*, tbl2.* FROM ( SELECT * FROM `my_project.my_dataset.my_table_1` ) AS tbl1 LEFT JOIN ( SELECT * FROM `my_project.my_da

我在Google Big Query中有两个表。一个表是一种产品目录(1:1),而第二个表是与产品相关的信息(1:n)。对于一个问题,我将两者都加入。但是联接失败,因为两个表中都存在列
pid
和其他一些列

#standardSQL
SELECT tbl1.*, tbl2.* FROM (
  SELECT * FROM `my_project.my_dataset.my_table_1`
  ) AS tbl1
LEFT JOIN ( SELECT * FROM `my_project.my_dataset.my_table_2`) AS tbl2
ON tbl1.pid = tbl2.pid
WHERE tbl1.category LIKE '111002%'
想法1:如何选择
*
,而无需重复的列(我可以手动输入)

想法2:如何为联接中的列提供左/右前缀


非常感谢您的帮助。

为避免从联接的两侧重复
pid
,请使用
USING
子句:

#standardSQL
SELECT * FROM (
  SELECT * FROM `my_project.my_dataset.my_table_1`
  ) AS tbl1
LEFT JOIN ( SELECT * FROM `my_project.my_dataset.my_table_2`) AS tbl2
USING(pid)
WHERE tbl1.category LIKE '111002%'
要从联接的两侧为列名添加前缀,请使用对选择列表中的表的引用,而不是对它们应用
*

#standardSQL
SELECT tbl1, tbl2 FROM (
  SELECT * FROM `my_project.my_dataset.my_table_1`
  ) AS tbl1
LEFT JOIN ( SELECT * FROM `my_project.my_dataset.my_table_2`) AS tbl2
USING(pid)
WHERE tbl1.category LIKE '111002%'

查询产生的列将是
tbl1
tbl2
,它们是包含这些表中作为字段的列的结构。

谢谢!第二种说法有效,第一种说法无效。可能是因为表1实际上是一个视图?还有一个问题:既然第一个表是较小的表,那么应该将位置放在第一个表的SELECT中吗?还是说BigQuery正在优化语句?BigQuery在连接之外时会“下推”过滤器(只要您使用标准SQL)。我更新了第一个示例,因为我认为如果您使用
*
而不是
tbl1.*,tbl2.*
,它会起作用。