当前位置: 首页 > 知识库问答 >
问题:

MySQL-从与第一个表匹配的第二个表中选择最后一条记录

楚修为
2023-03-14

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

表-客户

  • ID
  • customer_name

表-订单

  • ID
  • order_id
  • customer_id

customers表包含customers记录,orders表包含客户下的订单,

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

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

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

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

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

事先谢谢你的帮助。

共有2个答案

凤柏
2023-03-14

在MySQL中,只有很少的方法可以让它工作(我现在实际上就是这样)。第一种方法是在join之前将表排序为desc

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
赵朝
2023-03-14

请尝试此查询

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

order表中没有任何日期字段,因此假设最新的订单将是具有max(order_id)的订单。

 类似资料:
  • 问题内容: 我有一个表和一个表,对于每个有付款的用户,表中可能有多个关联的付款。我想选择所有有付款的用户,但只选择他们最近的付款。我正在尝试使用此SQL,但之前从未尝试过嵌套SQL语句,所以我想知道自己在做什么错。感谢帮助 问题答案: 您需要有一个子查询,以获取每个日期的最新日期。

  • 我有三张桌子,像第一张,第二张,第三张。 我需要一个mysql解决方案。 从table1、table2中选择table1.val1、table2.val1,并更新返回的值,如下所示。 更新table3设置value=table1.val1,其中value=table2.val1 我的查询不工作.. “WHERE子句”中的列“C1.COM_ID”未知

  • 问题内容: 我有两个看起来像这样的表: 表:案例 id 名称 状态 case_no 表:注意事项 id case_id note_date 注释 我希望能够创建一个查询,以从案例表中获取数据,并仅从注释表中获取案例表中每一行的最新条目。到目前为止,我根本没有运气。 任何指针将不胜感激 问题答案: 这只会返回带有注释的案例: 如果需要所有案例,无论是否附带注释:

  • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!

  • 问题内容: 给定 当我不知道n是什么时,如何选择最后一个’service-n’行?我尝试添加,但是没有用。 我有: 但它选择第一行,而我要最后一行。 我无法使用,因为实际上’service-n’行的数量是动态的,并且变化很大。 问题答案: 答案正是我把[last()]放在哪里,我把它放在错误的地方 它在这里: 不在这里:

  • 问题内容: 我有两个选择: 如果我首先选择“水果”,该如何使用jQuery?第二个选择仅向我显示水果- 香蕉,苹果,橙子。如果我在第一个选择中选择“鸟”,则第二个选择仅显示“鸟”-老鹰,鹰。等等… 我试图用这段jQuery代码来做到这一点: 不幸的是,它几乎删除了所有内容,而且我不知道如何恢复一些选择。我也阅读了一些有关克隆的内容,但是在这种情况下我不知道如何使用它。 问题答案: $(“#sele