Sqlite UNION ALL 不同列的查询

问题描述 投票:0回答:3

UNION ALL
与具有不同列数的查询一起使用会返回以下错误
sqlite3.OperationalError: SELECTs to the left and right of UNION ALL do not have the same number of result columns
。 我试过 this答案,但我认为现在已经过时并且不起作用。我尝试在文档中查找某些内容,但找不到。
UNION
UNION ALL
都不起作用。 这个答案对我来说有点复杂,难以理解。

实现这一目标的解决方法是什么?带有

Null
的专栏 - 我该怎么做?

更新:

另外,我也不知道号码。或表的名称,如在我的程序中,我允许用户创建和操作数据。 为了找出数据库中的查询,我使用:

SELECT name FROM sqlite_master WHERE type='table';

并找出我使用的列:

[i[0] for i in cursor.description]
sqlite
3个回答
0
投票

很简单,并集每一侧的列大小和类型必须相同。

您可以通过将列转换为正确的类型或将缺失的列设置为 NULL 来使它们相同。


0
投票

我认为您只需要通过添加“空”列来补偿缺失的列。

CREATE TABLE test_table1(k INTEGER, v INTEGER);
CREATE TABLE test_table2(k INTEGER);

INSERT INTO test_table1(k,v) VALUES(4, 5);
INSERT INTO test_table2(k) VALUES(4);

SELECT * FROM test_table1 UNION ALL SELECT *,'N/A' FROM test_table2;
4|5
4|N/A

这里我添加了另一个带有“N/A”的伪列,因此

test_table2
在 UNION ALL 发生之前有两列。


0
投票

SQLite 选择具有表的所有列结构的空行

我有一个解决方案,创建一行,所有列都填充为 NULL。 您可以填写您已经知道的列并将其他列保留为 NULL,然后将其 UNION 到另一列。

© www.soinside.com 2019 - 2024. All rights reserved.