简短背景:我有一个 SQLite 数据库,大小为几 GB,并且还在增长。它包含一堆非常简单的表格。每个表由一个 64 位整数主索引字段 (TStamp) 和一个值字段 (Val) 组成。字段 TStamp 实际上是日期时间的长整数表示。这些表具有广泛不同的行数和有些可变的内容类型,但这无关紧要。主表 (tbIndDate) 包含完整的日期范围,具有与其他表相同的主索引 (TStamp),并在其 Val 字段中保存人类可读的日期时间。例如,
名为 tbIndDate 的主索引表:
TStamp Val
634082688000000000 5/1/2010 0:00:00
634082691000000000 5/1/2010 0:05:00
634082694000000000 5/1/2010 0:10:00
634082697000000000 5/1/2010 0:15:00
etc etc
自动化标签 6FI1.PV 的示例表,名为 tb6FI1%PV:
TStamp Val
634085793000000000 41.7
634085796000000000 42.83
634085799000000000 41.44
634085802000000000 40.43
634085805000000000 39.78
etc etc
将数据输入表由一个小的 vb.net 程序处理,当一个新的自动化标签添加到捕获列表时,程序使用自动化标签名称创建一个新表,并开始填充它。这一切都很顺利。
好的。我已经开始构建一个从数据库中获取数据的工具。它适用于内部连接:
SELECT [tbIndDate].[Val] AS 'Timestamp',[tb6FI1%PV].[Val] AS '6FI1.PV',
[tb6FI34%PV].[Val] AS '6FI34.PV',[tb6AI32%PV].[Val] AS '6AI32.PV'
FROM [tbIndDate],[tb6FI1%PV],[tb6FI34%PV],[tb6AI32%PV]
WHERE [tbIndDate].[TStamp]=[tb6FI1%PV].[TStamp]
AND [tbIndDate].[TStamp]=[tb6FI34%PV].[TStamp]
AND [tbIndDate].[TStamp]=[tb6AI32%PV].[TStamp];
这将返回:
Timestamp 6FI1.PV 6FI34.PV 6AI32.PV
1/1/2013 0:00:00 42.4679 1.499 0.8439
1/1/2013 0:05:00 40.3628 1.5048 0.8435
1/1/2013 0:10:00 38.2652 1.5028 0.8436
1/1/2013 0:15:00 37.8582 1.5029 0.8436
耶!:)
我也得到了一些平均和时间间隔查询的工作。
但是,由于标签数据并非对所有日期都可用,我想创建一个选项来列出主索引中的所有日期,即使某些标签表没有匹配的数据。
换句话说,带有左外连接的 SELECT 查询。每个人都知道这一点。数据可能如下所示:
Timestamp 6FI1.PV 6FI34.PV 6AI32.PV
1/1/2013 0:00:00 42.4679 1.499 NULL
1/1/2013 0:05:00 40.3628 1.5048 NULL
1/1/2013 0:10:00 38.2652 NULL NULL
1/1/2013 0:15:00 37.8582 NULL 0.8436
麻烦的是,我尝试过的 SQL 都没有奏效。这是一个没有去的:
SELECT [tbIndDate].[Val] AS 'Timestamp',[tb6FI1%PV].[Val] AS '6FI1.PV',
[tb6FI34%PV].[Val] AS '6FI34.PV'
FROM [tbIndDate],[tb6FI1%PV],[tb6FI34%PV]
LEFT JOIN [tbIndDate] ON [tbIndDate].[TStamp]=[tb6FI1%PV].[TStamp]
LEFT JOIN [tbIndDate] ON [tbIndDate].[TStamp]=[tb6FI34%PV].[TStamp];
错误是“SQL 错误或缺少数据库,列名不明确:tbIndDate.Val”
我尝试从几个示例中复制语法,但没有一个完全相同,我的尝试失败了。
我做错别名了吗?用于容纳表名中特殊字符的方括号?我是一个完整的 SQL 初学者,所以不要拒绝建议。