我不是SQL专家,因此无法设计mysql查询来查询使用“复合设计模式”设计的数据库表。
表格是:
复合材料: id,name,type [type是“Condition”或“ConditionGroup”]
composites_properties: id,composite_id,property_id
分组: id,parent_id,child_id
属性:id,key,value
我想要做的是生成一个查询,该查询将返回组(“ConditionGroup”)成员条件(“条件”)的唯一属性,这样我最终得到一个组名和一个属性键列表(继承来自会员条件)。
我提出的最好的是:
SELECT DISTINCT properties.`key`, composites.name
FROM composites, composites_properties, properties
WHERE composites.id=composites_properties.composite_id
AND properties.id=composites_properties.property_id
AND composites.id IN (
SELECT child_id FROM groupings WHERE parent_id IN
(SELECT id FROM composites WHERE type='ConditionGroup')
)
如果多个成员条件具有该属性,则会生成每个成员条件及其属性列表,其中重复属性。
最后我想:
组名
property_1
property_2
property_3
但是我得到以下类型列表(没有指示条件属于哪个组)
条件名称1 property_1
条件名称1 property_2
条件名称1 property_3
条件名称2 property_1
条件名称2 property_2
条件名称3 property_1
条件名称3 property_2
有什么建议吗?
答案 0 :(得分:0)
说实话,我对你想要完成的事情有点不清楚,但我会试一试。如果你可以澄清这个查询不能做你想做的事情,我可能会进一步帮助你。
SELECT c.name, p.key
FROM composites c
INNER JOIN groupings g ON c.id = g.parent_id
INNER JOIN composites_properties cp ON cp.composite_id = g.child_id
INNER JOIN properties p ON p.id = cp.property_id
WHERE c.type = 'ConditionGroup'
这对我来说似乎不是世界上最好的查询,因为它忽略了每个分组中的孩子实际上是什么,所以我不确定这是你想要的。