将UNION ALL
与列数不同的查询一起使用会返回以下错误sqlite3.OperationalError: SELECTs to the left and right of UNION ALL do not have the same number of result columns
。我试过了这个答案,但我认为现在已经过时了,不起作用。我试图在文档中找到一些东西,但找不到。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发生之前有两列。