大查询:带有列前缀的SQL JOIN

时间:2018-05-02 14:05:35

标签: 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_dataset.my_table_2`) AS tbl2
ON tbl1.pid = tbl2.pid
WHERE tbl1.category LIKE '111002%'

创意1:如何选择没有重复列的*(我可以手动放入)。

创意2 :如何为联接中的列提供左/右前缀?

感谢任何帮助。

1 个答案:

答案 0 :(得分: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%'

查询产生的列将是tbl1tbl2,它们是STRUCT,其中包含来自每个表的列作为字段。