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

Mat*_*ias 2 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%'
Run Code Online (Sandbox Code Playgroud)

想法1:如何*在没有重复列的情况下进行选择(我可以手动输入)。

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

任何帮助表示赞赏。

Ell*_*ard 5

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%'
Run Code Online (Sandbox Code Playgroud)

要为连接两侧的列名称添加前缀,请使用对选择列表中的表的引用,而不是应用于.*它们:

#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%'
Run Code Online (Sandbox Code Playgroud)

查询生成的列将为tbl1tbl2,它们是包含每个表中的列作为字段的结构。