You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Order、Customer、Address表的Flexible Search查询需求

解决方案:获取所有注册客户及最新订单信息

嘿,我来帮你搞定这个需求!首先咱们先明确下三张表的常规关联逻辑(如果你的表结构略有不同,可以稍作调整):

  • Customer表:存储客户核心信息,包含主键ID、Customer_Name、Email,以及关联地址表的外键AddressID
  • Address表:存储客户地址信息,包含主键ID、Country、Phone
  • Order表:存储订单信息,包含Order_Code(订单编码)、关联客户的外键CustomerID,还有Order_Date(用来判断最新订单,要是没有这个字段,用自增的订单ID也可以)

实现SQL(兼容多数主流数据库)

SELECT
    c.Customer_Name,
    c.Email,
    c.ID,
    a.Country,
    a.Phone,
    o.Latest_Order_Code
FROM Customer c
-- 关联地址表获取客户的国家、电话信息
LEFT JOIN Address a 
    ON c.AddressID = a.ID
-- 子查询获取每个客户的最新订单编码
LEFT JOIN (
    SELECT
        CustomerID,
        Order_Code AS Latest_Order_Code,
        -- 按客户分组,订单时间倒序排序,标记每条订单的序号
        ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY Order_Date DESC) AS rn
    FROM `Order` -- 注意:Order是SQL关键字,多数数据库需要用反引号/方括号转义,比如SQL Server用[Order]
) o 
    ON c.ID = o.CustomerID 
    AND o.rn = 1; -- 只取每个客户的第一条(最新)订单

关键逻辑说明

  1. 确保返回所有注册客户:用Customer作为主表,搭配LEFT JOIN,哪怕客户没有地址或订单,也会被包含在结果里
  2. 获取最新订单:用窗口函数ROW_NUMBER()按客户分组,对订单按时间倒序排序,只保留每组的第一条记录(也就是最新的订单),再通过LEFT JOIN关联到主查询,没有订单的客户对应的Latest_Order_Code会自动显示为NULL(也就是你要的留空效果)
  3. 适配无订单时间的场景:如果你的Order表没有Order_Date字段,只要订单ID是自增的,把子查询里的ORDER BY Order_Date DESC改成ORDER BY ID DESC就行,同样能拿到最新订单

内容的提问来源于stack exchange,提问作者User2413

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:27:23