短い背景:私はSQLiteデータベースを持っており、サイズが数GBで、大きくなっています。非常に単純なテーブルがたくさん含まれています。各テーブルは、64ビット整数のプライマリインデックスフィールド(TStamp)と値フィールド(Val)で構成されています。フィールドTStampは、実際には日時のlong-int表現です。テーブルの行数は大きく異なり、コンテンツタイプも多少異なりますが、それは問題ではありません。マスターテーブル(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
tb6FI1%PVという名前の自動化タグ6FI1.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初心者なので、アドバイスをためらわないでください。