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

MySQL如何将两个查询改写为子查询关联订单表与客户表取数

SQL语句编写方案

1. 子查询实现(符合嵌入要求)

直接将获取客户名称的查询作为关联标量子查询放在SELECT字段列表中即可:

SELECT 
    client_id, 
    order_id, 
    deadline, 
    state,
    (SELECT name FROM clients WHERE id = orders.client_id) AS client_name
FROM orders 
GROUP BY order_id

说明:

  • 子查询中通过orders.client_id关联外层主查询的当前行客户ID,逐行匹配获取对应的客户名称,别名为client_name
  • 如果部分订单的client_id在clients表中没有对应记录,该字段会返回NULL,不会丢失原有订单数据

2. 可选:JOIN实现(执行效率更高的常用写法)

如果对性能要求更高,更推荐用左连接实现同样效果,避免逐行执行子查询的开销:

SELECT 
    o.client_id, 
    o.order_id, 
    o.deadline, 
    o.state,
    c.name AS client_name
FROM orders o
LEFT JOIN clients c ON o.client_id = c.id
GROUP BY o.order_id

注意事项:

如果你的数据库开启了ONLY_FULL_GROUP_BY模式,需要确保同一个order_id下的client_id、deadline、state都是唯一值,否则非分组字段的取值可能不符合预期,建议调整分组逻辑或对非分组字段加聚合函数(比如MAX()/MIN())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:48:04