MySQL连接查询多个匹配条件

时间:2018-02-08 20:15:13

标签: mysql

首先,我为模糊的标题道歉..我会更新它以更好地反映我的问题,如果有人有建议,但不是我不知道如何分类这个主题:

我有一些表存储某些设备的信息。表格的组织如下所示。 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

1 个答案:

答案 0 :(得分:0)

想知道你是否考虑过嵌套查询?首先是这里的巢:

SELECT dp_id FROM comp_prop WHERE height = '20cm'

哪个会给你带有特定属性的所有项目的dp_id,可以像这样推送到条件中:

SELECT * FROM comp_prop WHERE dp_id IN (...)

然后加入其他三张桌子