SQL多表查询练习:如何用单条SELECT语句关联多张表返回指定字段
结论
完全可以通过单条SELECT语句实现需求,核心逻辑是基于三个表的外键关联做连接查询即可。
表关联逻辑
三个表的关联关系如下:
customer表的主键id和sales_order表的外键customer_id关联,匹配客户和对应的订单sales_order表的主键id和sales_order_item表的外键sales_order_id关联,匹配订单和对应的商品明细
所需字段的来源:
name:来源于customer.nameorder_number:来源于sales_order.order_numbersku:来源于sales_order_item.skuvalue:即商品成本,来源于sales_order_item.cost,别名重命名为value即可
实现语句
1. 仅返回有订单、且订单有商品明细的记录(INNER JOIN版本)
SELECT c.name, so.order_number, soi.sku, soi.cost AS value FROM customer c INNER JOIN sales_order so ON c.id = so.customer_id INNER JOIN sales_order_item soi ON so.id = soi.sales_order_id;
说明:该语句会过滤掉没有下单的客户(如测试数据中的Fernanda、Daniel),以及没有商品明细的订单,仅返回完整匹配的记录。
2. 返回所有客户记录,无订单/无明细字段补NULL(LEFT JOIN版本)
SELECT c.name, so.order_number, soi.sku, soi.cost AS value FROM customer c LEFT JOIN sales_order so ON c.id = so.customer_id LEFT JOIN sales_order_item soi ON so.id = soi.sales_order_id;
说明:该语句会保留所有客户信息,若客户没有订单,order_number、sku、value字段会自动填充为NULL。
内容的提问来源于stack exchange,提问作者Matheus Vinicius Duarte
相关产品推荐
相关产品推荐

