MySQL连接查询多个匹配条件

标签 mysql

首先,我对模糊的标题表示歉意。如果有人有建议,我会更新它以更好地反射(reflect)我的问题,但我不知道如何对这个主题进行分类:

我有一些表存储某些设备的信息。表格的组织方式如下所示。 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,因为它们的高度为 20 厘米。我希望返回 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

最佳答案

想知道您是否考虑过嵌套查询?首先是巢穴:

SELECT dp_id FROM comp_prop WHERE height = '20cm'

这将为您提供具有特定属性的所有项目的 dp_id,可以将其插入条件,如下所示:

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

然后将其他三个表连接在一起

关于MySQL连接查询多个匹配条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694037/

相关文章:

MySQL 查询不显示最近的用户名

mysql - 将数据库名称作为参数传递到 mySQL 中

php - 在 mysql 中搜索长字符串中的关键字?

mysql - 当列的值依赖于 SQL 中不同行的数据时,如何添加列?

mysql - 如何规范mysql数据库表

mysql - 从文本文件读取 IP 地址到 IPTABLES

php - 使用时间戳保存 contenteditable 中的更改

python - 如何使用 python pyodbc 检查表中是否存在列?

mysql - mysql中使用case将列值转换为行值

python - 使用 SQLAlchemy 无法在 Flask 应用程序中调用 BaseQuery 对象