14

我有两张表客户和订单,下面是结构。

表 - 客户

  • ID
  • 顾客姓名

表 - 订单

  • ID
  • order_id
  • 客户ID

客户表有客户记录,订单表有客户下的订单,

orders 表中的customer_id 链接到customers 表的id字段

现在一个客户可以有零个或一个或多个订单,我只想获得客户下的最后一个订单。

当我运行以下查询一个简单的不可见连接时,它返回客户的所有订单

SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id

我也尝试了不同的 JOIN 语句,但无法获得客户的最后一个订单,我想在一个 SQL 查询中为所有客户获取它。

预先感谢您的帮助。

4

3 回答 3

21

在 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
于 2014-02-21T13:31:24.107 回答
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).

于 2013-05-28T06:47:40.807 回答
-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;
于 2013-05-28T07:07:39.330 回答