Короткий фон: у меня есть база данных SQLite, имеющая несколько гб и растущая. Он содержит кучу очень простых таблиц. Каждая таблица состоит из 64-битного целочисленного первичного поля индекса (TStamp) и поля значений (Val). Поле TStamp на самом деле представляет собой long-int представление даты-времени. В таблицах широко варьируются числа строк и несколько переменных типов контента, но это не имеет значения. Мастер-таблица (tbIndDate) содержит полный диапазон дат, имеет тот же первичный индекс (TStamp), что и другие таблицы, и сохраняет человеко-читаемые дату-время в своем поле Val. Например,Возникли проблемы с левым соединением SQL в SQLite
Мастер индекс таблицы, названный 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, и когда новый новый тег автоматизации добавляется в список захвата, программа создает новую таблицу с использованием имени тега автоматизации и начинает ее заполнять. Это все работает реально.
OK. Я начал создавать инструмент для получения данных из базы данных. Он отлично работает для внутренних соединений:
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
Yay! :)
Я также получил некоторые запросы усреднения и интервала времени.
Однако, поскольку данные тегов недоступны для всех дат, я хотел бы создать опцию для отображения всех дат в главном индексе, даже если некоторые таблицы тегов не имеют соответствующих данных.
Запрос 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, поэтому не сдерживайтесь с советами.
Добро пожаловать в Переполнение стека! Это похоже на хороший вопрос, но он немного длинный, что может отвратить некоторых ответчиков. Я удалил несколько пустых строк, но, возможно, какая-то информация о том, что уже работает, не нужна или может быть сокращена? – ughoavgfhw
Спасибо за приветствие - я отредактировал некоторые многословие. Не хотел, чтобы мой первый пост был одним из тех, кто недостаточно «инфо»! - Дон –