我一直在寻找这个选择问题的解决方案,但找不到它。
我有多个桌子,我需要做一个大选择。 不幸的是,一个表包含多个有效值。 但只需要最高价值。
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链接到订单表。
感谢任何帮助。
答案 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;