我将两个数据库(称为A和B)连接到SQLite的内存实例。 A较旧,并且有一个名为MAINVIEW的视图。 B是一个更新的,具有相同的视图,只有MAINVIEW与现在使用CTE构建(更新的SQLite版本,让我这样做而不是子选择)
如果我附加第一个和第二个B,我试图转移B.MAINVIEW它是空的,A.MAINVIEW按预期出来。 如果我首先附加B和第二个,那么两个转储都按预期出现,其余的花哨用法我使用它们,查看视图和连接和排序。
抽象描述,我知道,但是我可以放入的代码不多,因为它们是通过bash + sqlite构建的,并且这不是最好的东西,实际上要清楚。
任何人都遇到过这种行为。
有关如何以更好的方式调试此问题的任何提示(无法理解它正在执行的转储上的.eqp,但我可以根据请求发布正确解密它们的任何人)
使用SQLite 3.7.10创建了旧的数据库 已使用SQLite 3.15.2
创建了新的数据库简化示例:
.databases
.load ./lib/libsqlitefunctions.so
DETACH DATABASE '103nd10';
DETACH DATABASE '103nd14';
ATTACH DATABASE '/sp001fe1/proj/5297/103nd10/SAVE/4D/sqlite/103nd10.db' AS '103nd10';
ATTACH DATABASE '/sp001fe1/tpa/103nd14/DATA/SQLite/103nd14.db' AS '103nd14';
.tables
CREATE TEMP VIEW IF NOT EXISTS vInteractive AS
SELECT m0tvSP.ID AS SP_ID
FROM "103nd10".vSP AS btvSP
INNER JOIN "103nd14".vSP AS m0tvSP ON m0tvSP.ID == btvSP.ID;
SELECT COUNT(*) FROM vInteractive;
.database之后的输出:
seq名称文件
0主要 2 103nd14 /sp001fe1/tpa/103nd14/DATA/SQLite/103nd14.db
3 103nd10 /sp001fe1/proj/5297/103nd10/SAVE/4D/sqlite/103nd10.db
.tables之后的输出:
103nd10.Edit_RCV 103nd10.vSP_port
...
103nd10.vPerimeter_SP 103nd14.vSP
...
103nd10.vResponse 103nd14.vWeekly
103nd10.vSP
视图的行数:
COUNT(*)
0
如果我切换ATTACH DATABASES,则行计数变为:
COUNT(*)
24340
即使我只尝试转储 103nd14.vSP 视图,我使用第一个订单获得0。 这就是我如何识别103nd14数据库及其使用CTE的视图的问题。