我有两个表客户和订单,下面是结构。
表格 - 客户
表格 - 订单
客户表中有客户记录,订单表中有客户下订单,
订单表中的customer_id 链接到customers表的 id 字段。
现在一个客户可以拥有零个或一个或多个订单,我想只获得客户的最后订单。
当我运行以下查询时,一个简单的隐形连接,它返回客户的所有订单
SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id
我也尝试过不同的JOIN语句,但无法获得客户的最后一个订单,我希望在一个SQL查询中为所有客户提供。
提前感谢您的帮助。
答案 0 :(得分:22)
在MySQL中,只有几种方法可以使它工作(我现在实际上)。第一个是在desc
:
join
之后
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN orders o
ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)
实时使用是完成任务的唯一方法,但是如果你需要实时加入,你可以创建一个临时表或别名表来对其进行排序以进行选择,如下所示:
CREATE TABLE tmp_your_table AS
SELECT * FROM orders ORDER BY id DESC
所以现在你可以让这个加入工作了:
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN tmp_your_table o ON o.id = tmp_your_table.id
答案 1 :(得分:13)
尝试此查询
SELECT
c.customer_name,
max(o.order_id)
FROM
customers c
INNER JOIN
orders o
ON
o.customer_id = c.id
GROUP BY
c.customer_name
订单表中没有任何日期字段,因此假设最新订单是具有max(order_id)
的订单。
答案 2 :(得分:-1)
尝试此查询
SELECT
c.customer_name,
o.order_id
FROM
customers c
INNER JOIN
orders o
ON
o.customer_id = c.id
ORDER BY
o.id desc
LIMIT 1;