Я пытаюсь следующие заявления, используя sql select & vb .net - PullRequest
2 голосов
/ 22 августа 2011

Я сделал что-то подобное в pvp, используя цикл while, но я не думаю, что это верно для vb.У меня всего 4 таблицы, и 3 из них основаны на 1.

Main Table:
weather

Sub Tables:
applicationData
accidentData
trafficData

Моя цель - использовать мою систему фильтров для проверки таблицы данных о погоде.Затем он ищет в других таблицах данные о трафике, авариях и приложениях на основе местоположения, даты и времени полей данных о погоде.(Все они разделяют эти столбцы).Временами бывает несколько несчастных случаев на каждую дату / время / местоположение.

Для простоты объяснения, я бы хотел, чтобы вы объяснили это двумя разными таблицами, так что вот мои запросы.

SELECT event, date, time, location 
FROM weather 
WHERE date= '" & datepicker.Text & "' 
AND time = '" & eventTime.SelectedItem.Value & "'

Затем я хочу взять дату, время и местоположение и выполнить поиск в одной из вложенных таблиц с этой информацией.

SELECT roadway_number, mile_marker 
FROM  accident 
WHERE date= 'query1Date' 
AND time = 'query1Time' 
AND location = 'query1Location'

Я думаю, что хочу отобразить всю эту информацию в сетке данныхи отобразить его, чтобы показать все погодные поля, даже если нет данных о происшествиях, которые можно было бы использовать с ним.Как это:

13:00, 12/1/10, Событие Погоды Amity: Снег

14:00, 12/1/10, Событие Погоды Amity: Легкий дождь

17:00,12/1/10 Событие погоды Amity: сильный снегопад: Дорога: I165N, Mile_Marker 95,5 Дорога: I165N, Mile_Marker 71

7 вечера, 12/1/10 Событие погоды Amity: сильный снегопад: Дорога: I165S,Mile_Marker 85.5

Я очень ценю помощь!

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Вместо того, чтобы запрашивать базу данных в цикле (реальный убийца производительности), объедините таблицы в вашем запросе:

SELECT weather.event, weather.date, weather.time, location,
    accident.roadway_number, accident.mile_marker
FROM weather
LEFT OUTER JOIN accident on weather.date = accident.date and weather.time = accident.time
    and weather.location = accident.location
WHERE date= '" & datepicker.Text & "' AND time = '" & eventTime.SelectedItem.Value & "'

OUTER join - это ключ к получению всех погодных записей независимо от того, есть ли несчастные случаи.

Вам также следует изучить параметризацию вашего запроса вместо объединения входных значений.

1 голос
/ 22 августа 2011

Вы можете использовать левое внешнее соединение для этого:

SELECT w.event, w.date, w.time, w.location, a.roadway_number, a.mile_marker 
FROM weather w
LEFT OUTER JOIN accident a ON a.date = w.date 
                          AND a.time = w.time
                          AND a.location = w.location
WHERE w.date= '" & datepicker.Text & "' 
AND w.time = '" & eventTime.SelectedItem.Value & "'
...