我正在尝试使用WITH
中的多个bigquery
子句创建查询。我收到错误消息:Duplicate column names in the result are not supported. Found duplicate(s):
,因为表中有一些重复的列。
问题是我无法删除它们,因为我需要将其显示在表中,并且表的group by
子句中也需要它们。
我的代码有点像这样:
WITH table0 as (## query0),
table1 AS (## query1),
table2 as (## query2),
table3 as (## query3),
table4 as (## query4),
table5 as (## query 5)
select
*
from
table0,
table1,
table2,
table3,
table4,
table5
如何处理WITH
中多个SQL
子句中的重复列
答案 0 :(得分:0)
为什么要创建子查询的笛卡尔积?
无论如何,与其他数据库相比,BigQuery为您提供了对列的更多控制。因此,如果col1
和table0
共用table1
,则可以执行以下操作:
select t1.*, t2.* except (col1)
如果要同时保留两个值:
select t1.*, t2.* except (col1), t2.col1 as t2_col1
或
select t1.* except (col1),
t2.* except (col1),
t1.col1 as t1_col1,
t2.col1 as t2_col1
答案 1 :(得分:0)
从您先前的问题(看起来已删除)开始,我想我记得您的用例,并且您有(可能是错误的)仅用于JOIN的字段是“重复的”
在这种情况下,您可以使用以下方法(在下面的示例中,假定那些重复的字段为id
和day
)
#standardSQL
SELECT *
FROM `project.dataset.table0`
JOIN `project.dataset.table1` USING(id, day)
JOIN `project.dataset.table2` USING(id, day)
JOIN `project.dataset.table3` USING(id, day)
例如在以下超级简化的虚拟示例中
#standardSQL
WITH `project.dataset.table0` AS (
SELECT 1 id, '2019-01-01' day, 0 col0
), `project.dataset.table1` AS (
SELECT 1 id, '2019-01-01' day, 1 col1
), `project.dataset.table2` AS (
SELECT 1 id, '2019-01-01' day, 2 col2
), `project.dataset.table3` AS (
SELECT 1 id, '2019-01-01' day, 3 col3
)
SELECT *
FROM `project.dataset.table0`
JOIN `project.dataset.table1` USING(id, day)
JOIN `project.dataset.table2` USING(id, day)
JOIN `project.dataset.table3` USING(id, day)
结果将是
Row id day col0 col1 col2 col3
1 1 2019-01-01 0 1 2 3
不抱怨重复字段
从上面的示例中可以看到-使用USING()
而不是ON
“ magicaly”解决了该问题-但再次注意-仅在“重复”字段都是JOIN字段的情况下>