具有不同列的Sqlite UNION ALL查询

  • 本文关键字:Sqlite UNION ALL 查询 sqlite
  • 更新时间 :
  • 英文 :


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

最新更新