我正在MySQL中使用多对多关系,如下面的简化示例所示。我想做的是给出一个类别 ID,找到该类别中的对象,并且只找到该类别。
我可以轻松地获取类别中的所有对象:
SELECT * from object INNER JOIN link ON object.objectID = link.objectID WHERE link.categoryID=1;
这给了我对象 1 和对象 2,但我想要的只是对象 1,因为对象 2 也在类别 2 中。
我唯一能想到的是将其用作子查询来获取这些对象 ID 的所有链接,然后获取计数为 1 的链接。
我希望有一种更简单,更有效的方法!
-- Table: object
+---------+-----------+
| id | name |
+---------+-----------+
| 1 | object1 |
| 2 | object2 |
+---------+-----------+
-- Table: category
+------+-----------+
| id | name |
+------+-----------+
| 1 | category1 |
| 2 | category2 |
+------+---------+
-- Table: link
+-----------+-------------+
| objectid | categoryid |
+-----------+-------------+
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
+-----------+-------------+
您可以按对象对link
表进行分组,并仅筛选包含一条记录的组:
SELECT objectid FROM link GROUP BY objectid HAVING COUNT(*) = 1 AND categoryid = 1