2

我在 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'

我想在数据网格中显示所有这些信息,并让它显示所有天气字段,即使没有事故数据。像这样:

2010 年 12 月 1 日下午 1 点,友好天气事件:雪

10 年 12 月 1 日下午 2 点,Amity 天气事件:小雨

10 年 12 月 1 日下午 5 点友好天气事件:大雪事故:道路:I165N,Mile_Marker 95.5 道路:I165N,Mile_Marker 71

2010 年 12 月 1 日晚上 7 点友好天气事件:大雪事故:道路:I165S,Mile_Marker 85.5

我真的很感激帮助!

4

2 回答 2

1

您应该能够为此使用左外连接:

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 & "'
于 2011-08-22T13:55:57.033 回答
1

不要在循环中查询数据库(真正的性能杀手),而是在查询中加入表:

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 连接是获取所有天气记录的关键,无论是否有相关事故。

您还应该考虑对查询进行参数化,而不是连接输入值。

于 2011-08-22T14:02:55.937 回答