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 的列数不匹配的主要内容,如果未能解决你的问题,请参考以下文章

异常:数据中的列数与范围内的列数不匹配

列数不匹配

PHP ~ 列数与第 1 行的值数不匹配

RedShift Copy - 列数不匹配 - 可以在卸载中指定吗?

PHP ~ 列数与第 1 行的值数不匹配

DB::Exception: 从 localhost:8000 接收。 DB::Exception:列数不匹配