使用复合设计模式对数据库进行mysql查询

时间:2011-03-21 21:24:10

标签: mysql

我不是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

有什么建议吗?

1 个答案:

答案 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'

这对我来说似乎不是世界上最好的查询,因为它忽略了每个分组中的孩子实际上是什么,所以我不确定这是你想要的。