sqlite:当另一个表不存在时使用UNION进行选择

时间:2014-06-24 19:29:06

标签: sqlite

我有两个sqlite3数据库,它们具有相同模式和(可能)重叠数据的表。例如,两个数据库中的Temperature表。如果我想将两个表中的所有列合并,我将首先ATTACH另一个数据库:

sqlite> ATTACH DATABASE 'old.sqlite' AS Old;

然后将它们与UNION组合在一起:

sqlite> SELECT * FROM Temperature UNION SELECT * FROM Old.Temperature;

这很好用。

但有时候只有一张桌子。例如,对于湿度,我可能只有一个Humidity而在另一个数据库中没有对应物。在这种情况下,查询失败:

sqlite> SELECT * FROM Humidity UNION SELECT * FROM Old.Humidity;
SQL error: no such table: Old.Humidity

我想得到的是表中存在的所有列,而不是因为另一个表不存在而失败。

我事先不知道哪些表存在于哪些数据库中。我只将所有数据库中的表名组合成一个列表。并且正在读取数据的代码库部分需要在一个查询中获取所有列。

1 个答案:

答案 0 :(得分:1)

无法在SQL中以dyncamically方式创建查询。 (SQLite旨在从使用真正的编程语言编写的应用程序中使用。)

您必须事先检查表是否存在(使用PRAGMA table_info,或尝试使用该表的查询是否有效)。 然后使用或不使用UNION执行查询。