我这里有点棘手,SQLite 中的 3 个表如下:
汽车表
.------.------.--------------.---------.
| vin | year | make | model |
'------+------+--------------+---------'
| 1234 | 1965 | Aston Martin | DB5 |
| 5678 | 1965 | Ford | Mustang |
| 9012 | 1994 | Ford | Tarus |
`--------------------------------------'
价格表
.------.-------.---------------------.
| vin | price | last_modified |
'------+-------+---------------------'
| 1234 | 60000 | 2012-08-01 12:00:00 |
| 1234 | 58000 | 2012-08-02 12:00:00 |
| 1234 | 56000 | 2012-08-10 12:00:00 |
| 5678 | 30000 | 2012-08-02 12:00:00 |
| 9012 | 1000 | 2012-08-01 12:00:00 |
`------------------------------------'
里程表
.------.---------.---------------------.
| vin | mileage | last_modified |
'------+---------+---------------------'
| 1234 | 35000 | 2012-08-01 12:00:00 |
| 1234 | 35030 | 2012-08-02 12:00:00 |
| 1234 | 35100 | 2012-08-10 12:00:00 |
| 5678 | 60000 | 2012-08-02 12:00:00 |
| 9012 | 245000 | 2012-08-01 12:00:00 |
`--------------------------------------'
我想连接所有三个表以显示“汽车”表中的所有行,但只带来价格表中的单个最新“last_modified”价格和里程表中的单个最高里程。
最后我的结果看起来像:
.------.------.--------------.---------.-------.---------.
| vin | year | make | model | price | mileage |
'------+------+--------------+---------+-------+---------+
| 1234 | 1965 | Aston Martin | DB5 | 56000 | 35100 |
| 5678 | 1965 | Ford | Mustang | 30000 | 60000 |
| 9012 | 1994 | Ford | Tarus | 1000 | 245000 |
`--------------------------------------------------------'
如果我选择一个特定的 VIN(即“1234”),我会这样做:
SELECT
c.year, c.make, c.model, c.vin, p.price, m.mileage, p.last_modified
FROM
cars c
LEFT JOIN (
SELECT
price, vin, last_modified
FROM
price
WHERE
(vin = '1234')
ORDER BY
last_modified DESC LIMIT 1
) p
LEFT JOIN (
SELECT
mileage, vin, last_modified
FROM
mileage
WHERE
(vin = '1234')
ORDER BY
mileage DESC LIMIT 1
) m
WHERE
(c.vin = '1234') AND (c.vin = p.vin) AND (c.vin = m.vin)
GROUP BY
p.vin, m.vin
ORDER BY
c.vin, p.last_modified DESC, m.mileage ASC;
...但我想从“汽车”表中获取所有行。
有人有什么想法吗?