如何有效地将一对多查找表联接到MySQL中的多个列中?

时间:2018-07-23 17:24:20

标签: mysql left-join many-to-one lookup-tables

摘要

我有一个查询表,用于查询产品的不同类型的成本。关系是 1个产品与许多成本。我想创建一个查询以有效选择所有具有不同成本的产品。

背景

我需要确定一组6个不同的费用,才能在结果集中显示为单独的列。

到目前为止,我已尝试在同一张表上进行6种不同的LEFT JOIN处理,每种6种费用类型都进行一种处理。我觉得应该有一个更好的方法。

代码

以下是这两个表的相关列以及我到目前为止的尝试。例如,我将成本类型的数量从6个减少到2个。

Products

+------------+ | product_id | +------------+ | 1001 | | 1002 | | 1003 | +------------+

Costs

+---------+------------+-----------+-------------+ | cost_id | product_id | cost_type | cost_amount | +---------+------------+-----------+-------------+ | 1 | 1001 | Labor | 50.01 | | 2 | 1001 | Material | 488.92 | | 3 | 1002 | Labor | 132.11 | | 4 | 1002 | Material | 0.24 | | 5 | 1003 | Labor | 33.34 | +---------+------------+-----------+-------------+

MySQL查询

SELECT p.product_id c1.cost_amount AS labor_cost c2.cost_amount AS material_cost FROM products p LEFT JOIN costs c1 ON p.product_id = c1.product_id AND cost_type = 'Labor' LEFT JOIN costs c2 ON p.product_id = c2.prduct_id AND cost_type = 'Material'

预期结果

+------------+------------+---------------+ | product_id | labor_cost | material_cost | +------------+------------+---------------+ | 1001 | 50.01 | 488.92 | | 1002 | 132.11 | 0.24 | | 1003 | 33.34 | NULL | +------------+------------+---------------+

0 个答案:

没有答案