5表 - >显示某些不同的行

时间:2011-08-23 15:32:11

标签: mysql sql distinct outer-join

我正在根据过滤系统提取最终将来自5个表的信息。现在我有三个不同的数据库在运行,看起来很棒。我的问题是我有某些字段,我只想显示不同的信息和其他我想要显示的所有字段。为了更好地解释,我将举例说明。

我的选择代码:

SELECT w.event,
       w.city,
       w.DATE,
       a.TIME,
       w.tmc,
       a.weather,
       a.surface_temperature,
       p.top,
       p.LEFT
FROM   weather w
       LEFT OUTER JOIN application a
         ON a.DATE = w.DATE
            AND a.tmc = w.tmc
       LEFT OUTER JOIN pinlocations p
         ON w.city = p.cityname
WHERE  w.DATE = '" & datepicker_value.Text & "'
       AND w.TIME LIKE '" & eventTime.SelectedItem.Value & "'  

我有一张地图,我正在根据p.top和p.left放置引脚。当我点击这个时,我想显示城市名称,tmc,然后根据过滤搜索显示所有其他信息。在上面的示例中,它在引脚顶部创建引脚,为每个字段创建一个新引脚,我希望它是独特的。

我知道存在distinct命令,只是不确定如何在这种情况下使用它。

谢谢!

1 个答案:

答案 0 :(得分:1)

对要区分的值使用group by修饰符 然后对要在逗号分隔列表中列出的值使用group_concat

SELECT group_concat(w.event) as events,
       group_concat(w.city) as cities,
       group_concat(w.`DATE`) as dates,
       group_concat(a.`TIME`) as times,
       group_concat(w.tmc) as tmcs,
       group_concat(a.weather) as weathers,
       group_concat(a.surface_temperature) as temperatures,
       p.top,
       p.LEFT
FROM   weather w
       LEFT OUTER JOIN application a
         ON a.DATE = w.DATE
            AND a.tmc = w.tmc
       LEFT OUTER JOIN pinlocations p
         ON w.city = p.cityname
WHERE  w.DATE = '" & datepicker_value.Text & "'
       AND w.TIME LIKE '" & eventTime.SelectedItem.Value & "'  
GROUP BY p.top, p.left

如果左上角坐标只链接到一个城市(正如您所期望的那样),则无需将其放在group_concat语句中。 MySQL也不要求你把它放在group by子句中。

请参阅:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

*)您可以强制MySQL按规则强制执行严格的分组,但默认情况下它是关闭的。

你不能在这里使用distinct,因为distinct是全有或全无的事,它在所有选定值的集合中运行,而不仅仅在一个字段上运行。