我怎样才能在mysql中选择这些

时间:2015-07-12 15:30:09

标签: php mysql

想象一下,有两个表叫做: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表中为他插入的最后一行。

我该如何查询?

3 个答案:

答案 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

http://www.sqlfiddle.com/#!9/96885/2