餐厅多类型订单关联查询:如何用单SQL获取对应关联信息
问题分析
原查询语句存在两个核心问题:
- 使用隐式内连接(逗号分隔表),导致线上订单(
table_id=0)因无法匹配Tables表的记录而被过滤,无法查询到这类订单; - 未添加
Orders与Customers表的关联条件,会产生笛卡尔积,导致结果数据错误。
解决方案
使用**左连接(LEFT JOIN)**分别关联Tables和Customers表,确保所有订单都能被查询到,再通过CASE分支逻辑显示对应名称:
SELECT o.id AS order_id, CASE WHEN o.table_id > 0 THEN t.table_name ELSE c.customer_names END AS order_source_name FROM orders o LEFT JOIN tables t ON o.table_id = t.id LEFT JOIN customers c ON o.customer_id = c.id ORDER BY o.id ASC;
结果验证
执行上述语句后,会得到符合需求的结果:
| order_id | order_source_name |
|---|---|
| 1 | John |
| 2 | Table 1 |
| 3 | Table 2 |
内容的提问来源于stack exchange,提问作者Europeuser
相关产品推荐
相关产品推荐

