想象一下,有两个表叫做:Customers,Orders。
在客户中我们有行:
id=1 name=Alex key=12
id=2 name=Bob key=13
在我们的订单中:
id=1 device=phone status=ordered key=12
id=2 device=phone status=delivered key=12
id=3 device=memory status=ordered key=13
id=4 device=memory status=returned key=13
现在我希望它在Orders中的Customers中为每一个选择最后一个。就像它应该选择Alex的信息以及在Orders表中为他插入的最后一行。
我该如何查询?
答案 0 :(得分:1)
您可以使用聚合和连接执行此操作:
select o.*
from customers c left join
orders o
on c.key = o.key left join
(select o.key, max(id) as maxid
from orders o
group by o.key
) ok
on o.id = oo.id;
聚合获取最新值。
请注意,key
是MySQL中的保留字(请参阅here)。这使它成为一个糟糕的列名,所以你应该改变它。
答案 1 :(得分:1)
听起来像是在寻找分组(键)最大值(id),如https://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html所述
我更喜欢(没有充分理由)LEFT JOIN
变体与不相关的子查询。
答案 2 :(得分:0)
这是你可以做到的一种方式
select
c.*,
o.id,
o.device,
o.status
from customer c
join orders o on o.`key` = c.`key`
join (
select max(id) as id,`key` from orders
group by `key`
)o1 on o1.id=o.id