MySQL从多个表中选择1个结果,从1个表中选择具有多个值的MAX值

时间:2013-12-15 16:03:10

标签: mysql select max multiple-tables

我一直在寻找这个选择问题的解决方案,但找不到它。

我有多个桌子,我需要做一个大选择。 不幸的是,一个表包含多个有效值。 但只需要最高价值。

Table 1: customer (fields:  ID | customer_id | Name) 
values: (1, 1, Customer_name)
Table 2: address  (fields:  ID | customer_id | address_id | address | order_id)
values: (1, 1, 1, Streetname_Home, null) and (2, 1, 2, Streetname_Shipping, 2)
Table 3: order    (fields:  order_id | customer_id)
values: (2, 1)

这是一个真实情况的高度简化的例子,仅用于说明问题。

问题是地址表每个客户可以容纳2个地址(或更多)。 选择必须从客户表中选择客户的所有内容。 而不是使用地址表中最高的address_id。 以及订单表中的所有内容。

所以我现在得到的是:

Select
customer.*, 
address.*, 
order.*
from
customer left join 
address on (customers.customers_id = address.customers_id) left join
order on (order.order_id = customer.order_id)
where order.ID = 1;

由于此示例中有2个地址(家庭和运输),我需要选择仅使用address_id值最高的地址。 附在该地址的是order_id。

所以基于需要的address_id来获取order_id以将select链接到订单表。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为address表的id字段是其主键

SELECT customer.*, 
    address.*, 
    order.*
FROM customer
LEFT JOIN (SELECT customers_id, MAX(id) AS address_id
           FROM address
           GROUP BY customers_id) AS max_address
  ON customer.customers_id = max_address.customers_id
LEFT JOIN address 
  ON max_address.address_id = address.id
LEFT JOIN `order`
  ON (order.customers_id = customer.customers_id)
WHERE order.ID = 1;