查询带有或不带值的道具列表

时间:2010-04-29 17:37:49

标签: php mysql select relational

我正在尝试在三个关系表上创建SELECT,如下所示:

table_materials
-> material_id
- material_name

table_props
-> prop_id
- prop_name

table_materials_props
- row_id
-> material_id
-> prop_id
- prop_value

在我的页面上,我想得到像这样的结果,但我对查询有一些问题:

material    prop A    prop B    prop C    prop D    prop E
wood        350       NULL      NULL      84        16
iron        NULL      17        NULL      NULL      201
copper      548       285       99        NULL      NULL

所以查询应该返回类似的内容:

material   prop_name     prop_value
wood       prop A        350
wood       prop B        NULL
wood       prop C        NULL
wood       prop D        84
wood       prop E        16
// and go on with others rows

我想使用类似的东西:

SELECT *
FROM table_materials AS m
INNER JOIN table_materials_props AS mp
ON m.material_id = mp.material_id
INNER JOIN table_materials_props AS p
ON mp.prop_id = p.prop_id
ORDER BY p.prop_name

问题是查询没有返回NULL值,并且我需要prop所有materials订单,无论道具值是NULL or not < / p>

我希望这个例子很清楚!

1 个答案:

答案 0 :(得分:0)

交叉连接(或没有条件的内连接)所有选项,然后将它们连接到关联实体表。即使组合表中不存在组合,左连接也将保留prop / materials。

未测试:

SELECT * 
FROM table_materials AS m
INNER JOIN table_props as p 
LEFT JOIN table_material_props AS mp 
ON p.prop_id = mp.prop_id 
AND 
m.material_id = mp.material_id;
ORDER BY p.prop_name