将
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]
很简单,并集每一侧的列大小和类型必须相同。
您可以通过将列转换为正确的类型或将缺失的列设置为 NULL 来使它们相同。
我认为您只需要通过添加“空”列来补偿缺失的列。
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 发生之前有两列。
我有一个解决方案,创建一行,所有列都填充为 NULL。 您可以填写您已经知道的列并将其他列保留为 NULL,然后将其 UNION 到另一列。