历史表中的SQL LEFT JOIN

时间:2014-08-06 14:01:02

标签: sql postgresql join left-join

我准备了一个sqlFiddle,位于:http://sqlfiddle.com/#!2/951c1/2/1

我有3张桌子(汽车,颜色和car_color_history)。在colors中,我会感兴趣的颜色包含某种元数据。在cars中,有一堆汽车带有' wanted_color'告诉汽车改变给定颜色的钥匙。在car_color_history中,有所有条目,在什么特定时间汽车有什么颜色。

我现在想要的是一个视图/选择语句,以便为所有车辆提供当前想要的颜色信息。

我的第一个想法是使用左连接和某种GROUP BY魔法来做到这一点,但到目前为止,我无法让它工作

工作解决方案是小提琴中的第二个选择子选择。我是否正确,这不是一个很好的解决方案,因为它很慢?另外,我必须为每个显示的列提供子选择:(

有人有解决方案吗?

1 个答案:

答案 0 :(得分:2)

SQL Fiddle

select
    ca.carkey,
    description,
    cow.other_info as wanted_color,
    cco.other_info as current_color,
    cch.datetime as current_color_datetime
from
    cars ca
    left join
    colors cow on ca.wanted_color = cow.colorkey
    left join (
        select distinct on (carkey) *
        from car_color_history
        order by carkey, datetime desc
    ) cch using(carkey)
    left join
    colors cco on cch.colorkey = cco.colorkey