MySql 查询多对多关系

标签 mysql many-to-many

<分区>

n:m 关系的一个非常简单的例子让我感到困惑。假设我们有两个表“Plant”和“Attribute”,它们之间还有另一个表保存它们与 ID 的关系:

Plant--------hasAttribute--------Attribute
               P1 | A1
               P1 | A2
               P1 | A3
               P2 | A1
               P2 | A2
               P3 | A2
               P3 | A3 

因此,植物 1 具有属性 1、2 和 3。植物 2 具有属性 1 和 2,植物 3 具有属性 2 和 3。 现在,在一个查询中,我怎样才能得到例如所有具有属性 2 和 3 的植物? 结果应返回 P1 和 P3,因为它们都具有属性 2 和 3。 我正在尝试 union 但这也会给我 P2 结果......有什么想法吗?

最佳答案

这种查询结构避免了对 distinct 子句的需要(前提是解析表中没有重复记录)。

SELECT p.PlantID
FROM
  Plant p INNER JOIN PlantAttribute pa
    ON p.PlantID = pa.PlantID AND pa.AttributeID = 1
  INNER JOIN PlantAttribute pa2
    ON p.PlantID = pa2.PlantID AND pa2.AttributeID = 2;

关于MySql 查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202978/

相关文章:

mysql - 自动清除 mariadb 二进制日志

mysql - 需要帮助在 base64 编码的 MySQL 字段中搜索

php - mysql转mysqli函数困难

MySQL多对多关系问题

django - 如何通过直通关系保存ManyToMany字段

mysql - 与两个实体共享地址表

mysql - 如何写一个SQL查询来解决8皇后的问题?

python - 如何在多对多表中添加列(Django)

go - Gorm 中的 many2many,真的

hibernate @ManyToMany双向渴望获取