我正在尝试使用sql select& amp; vb .net

时间:2011-08-22 13:48:36

标签: sql vb.net nested-query

我在使用while循环的pvp中做了类似的事情,但我不认为这对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'

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

下午1点,12/1/10,Amity 天气事件:雪

友好时间,10月12日下午2点 天气事件:小雨

下午5点,12/10/10 Amity 天气事件:大雪 事故: 道路:I165N,Mile_Marker 95.5 路:I165N,Mile_Marker 71

下午7点,12/10/10 Amity 天气事件:大雪 事故: 道路:I165S,Mile_Marker 85.5

我真的很感激帮助!

2 个答案:

答案 0 :(得分: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 & "'

答案 1 :(得分: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联接都是获取所有天气记录的关键。

您还应该研究参数化查询而不是连接输入值。