【问题标题】:MySQL Join Without DuplicatesMySQL 无重复加入
【发布时间】:2012-06-16 09:34:21
【问题描述】:

我有一个客户表和一个订单表。每个客户可以有多个订单。

我想从订单表中选择每个客户以及他们最早的订单号(重要的是我选择最早的订单号,而不是任何订单)。我想列出是否有订单的客户,如果客户有多个订单,我不想将他们包含两次。

我正在使用这个:

  SELECT *
    FROM customers
    LEFT JOIN orders
    ON customers.id = orders.customer_id 
    GROUP BY customers.id

这给了我几乎我想要的东西,除了它会从表中选择它喜欢的任何订单 ID。我需要能够排序并选择最小的订单 ID。

有什么想法吗?

我很确定它在盯着我的脸...

编辑:请求的表格结构

  • 客户:


    | ID | Name | Address            | Etc |
    ----------------------------------------
    | 1  | Joe  | 123 Fake Street    |     |
    | 2  | Mike | 1600 Fake Road     |     |
    | 3  | Bill | Red Square, Moscow |     |
    ----------------------------------------
    
  • 订单:


    | ID | Customer_ID | Date |
    ---------------------------
    | 1  | 1           |  ... |
    | 2  | 2           |  ... |
    | 3  | 2           |  ... |
    | 4  | 1           |  ... |
    ---------------------------
    

【问题讨论】:

  • 你能发布表格结构吗?
  • 确定客户 ---------------------------------------- |身份证 |姓名 |地址 |等 | ---------------------------------------------------- | 1 |乔 |假街 123 号 | | | 2 |迈克 | 1600假路| | | 3 |比尔 |莫斯科红场 | | - - - - - - - - - - - - - - - - - - - - 命令 - - - - - ------------------ |身份证 |客户ID |日期 | --------------------------- | 1 | 1 | ... | | 2 | 2 | ... | | 3 | 2 | ... | | 4 | 1 | ... | --------------------------

标签: mysql join left-join


【解决方案1】:

为每个客户创建一个具有最低数字订单 ID 的虚拟表(a/k/a 子查询)。

SELECT customer_id, min(order_id)
  FROM orders
 GROUP BY customer_id

然后将该表与客户表连接起来,就像这样。

SELECT C.customer_id, firstorder.order_id
  FROM CUSTOMERS as C
  LEFT JOIN (
    SELECT customer_id, min(order_id)
      FROM orders
     GROUP BY customer_id
  ) AS firstorder ON c.customer_id = firstorder.customer_id

【讨论】:

  • 搞定了!太好了,非常感谢。我知道答案会很简单:)
  • 另外考虑看看:HAVING MIN(order_id) = order_id
【解决方案2】:

试试这个

Select customer.*,Order.OrderNo As EarilerORderNo
From Customers Left Join 
(Select customer_id,orderid from orders order by customer_id,orderid desc) As Orders 
ON Customers.Id=Orders.OrderID

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2020-10-11
    • 2011-07-17
    • 2015-12-21
    • 2014-09-25
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多