我在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 :如何为联接中的列提供左/右前缀?
感谢任何帮助。
答案 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%'
查询产生的列将是tbl1
和tbl2
,它们是STRUCT,其中包含来自每个表的列作为字段。