首先,我为模糊的标题道歉..我会更新它以更好地反映我的问题,如果有人有建议,但不是我不知道如何分类这个主题:
我有一些表存储某些设备的信息。表格的组织如下所示。 dev_prop表有一些属性也是组件。组件的属性存储在右侧的comp_prop表中。其他设备属性(如“颜色”)不再具有与之关联的属性,只是一个值。
device dev_prop comp_prop
name id name value id dev_id name value id dp_id
dv1 1 comp1 aaa 1 1 height 30cm 1 1
dv2 2 comp2 bbb 2 1 height 20cm 2 2
dv3 3 color red 3 1 height 20cm 3 4
comp1 ccc 4 2 weight 300g 4 2
comp2 aaa 5 2 weight 250g 5 4
color blue 6 2 weight 99g 6 1
color pink 7 3
我想查询数据库以选择高度为20厘米的所有组件,但我也希望将它们的权重属性放在一个单独的行中。我检索的所有行都应该有一个comp_prop.value,而且只有一个。
在上面的示例数据中,这适用于id为2和4的dev_props,因为它们的高度为20cm。我想要4行返回,其中两行是他们的高度,另外两行是他们的重量。
例如,我想检索这样的行:
select device.name, dev_prop.name, dev_prop.value, dev_prop.id,
comp_prop.name, comp_prop.value from comp_prop
inner join dev_prop on comp_prop.dp_id=dev_prop.id and ......
device | dev_prop.name | dev_prop.value | dev_prop.id | comp_prop.name | comp_prop.value
dv1 comp2 bbb 2 height 20cm
dv1 comp2 bbb 2 weight 300g
dv2 comp1 ccc 4 height 20cm
dv2 comp1 ccc 4 weight 250g
答案 0 :(得分:0)
想知道你是否考虑过嵌套查询?首先是这里的巢:
SELECT dp_id FROM comp_prop WHERE height = '20cm'
哪个会给你带有特定属性的所有项目的dp_id,可以像这样推送到条件中:
SELECT * FROM comp_prop WHERE dp_id IN (...)
然后加入其他三张桌子