Union All 的列数不匹配
Posted
技术标签:
【中文标题】Union All 的列数不匹配【英文标题】:Union All have mismatched column count 【发布时间】:2020-12-15 16:06:25 【问题描述】:我正在尝试合并一些表。但是我在查询时遇到了一些问题,因为我有以下错误: UNION ALL 中的查询列数不匹配;查询 1 有 10 列,查询 2 在 [3:1] 有 12 列
使用的查询是:
SELECT * FROM `table_1`
UNION ALL
SELECT * ,null, FROM `table_2`
UNION ALL
SELECT * FROM `table_3`
UNION ALL
SELECT * FROM `table_4`
UNION ALL
SELECT * , null, FROM `table_5`
请问有人有什么建议吗?
【问题讨论】:
请发布您的完整查询,因为我们需要发现语法故障。 在 UNION 中,您必须在每个 SELECT 中返回相同的列。 【参考方案1】:在UNION ALL 中,所有查询的列数都必须相同。
您需要发布所有表的架构。但是根据您发布的错误消息,这可能对前两个表有所帮助:
SELECT *, null FROM `table_1` -- assuming table_1 has 10 columns, add 1 more empty to match the table_2
UNION ALL
SELECT * FROM `table_2` -- assuming table_2 has 11 columns
-- make the same to the rest of queries
-- UNION ALL
-- SELECT * FROM `table_3`
-- UNION ALL
-- SELECT * FROM `table_4`
-- UNION ALL
-- SELECT * , null, FROM `table_5`
更新:
添加一个联合声明列的示例:
SELECT
col1_str,
col2_str,
col3_int,
col4_int
FROM `table_1`
UNION ALL
SELECT
col2_str,
FORMAT_DATE("%Y-%m-%d", col1_date) as col1_str, -- transform a date column to string
col3_int,
null
FROM `table_2`
【讨论】:
Schema :Account STRING NULLABLE Campaign_name STRING NULLABLE Date STRING NULLABLE Ad_set_name STRING NULLABLE Ad_name STRING NULLABLE Impressions INTEGER NULLABLE Cost__GBP_ FLOAT NULLABLE Link_clicks FLOAT NULLABLE Reach FLOAT NULLABLE Website_conversions FLOAT NULLABLE f0_ DATE NULLABLE 我尝试将日期字段的架构从字符串编辑为日期值,但我创建了另一个名为 f0 的列。有没有机会我可以将现有日期字段的架构从“字符串”覆盖到“日期”值? 您可以指定列名,而不是使用通配符*
。我会用一个例子来更新答案。以上是关于Union All 的列数不匹配的主要内容,如果未能解决你的问题,请参考以下文章