我有两个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
我想得到的是表中存在的所有列,而不是因为另一个表不存在而失败。
我事先不知道哪些表存在于哪些数据库中。我只将所有数据库中的表名组合成一个列表。并且正在读取数据的代码库部分需要在一个查询中获取所有列。
答案 0 :(得分:1)
无法在SQL中以dyncamically方式创建查询。 (SQLite旨在从使用真正的编程语言编写的应用程序中使用。)
您必须事先检查表是否存在(使用PRAGMA table_info,或尝试使用该表的查询是否有效)。 然后使用或不使用UNION执行查询。