获取项目仅在多对多关系中链接一次

时间:2012-06-06 16:13:41

标签: mysql

我正在使用MySQL中的多对多关系,如下面的简化示例所示。我想要做的是给出一个类别ID,找到该类别中的对象,并且只有该类别。

我可以轻松获取某个类别中的所有对象:

SELECT * from object INNER JOIN link ON object.objectID = link.objectID WHERE link.categoryID=1;

这给了我object1和object2,但是我想要的只是object1,因为object2也属于category2。

我唯一能想到的就是使用它作为子查询来获取这些对象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           |
+-----------+-------------+

1 个答案:

答案 0 :(得分:2)

您可以按对象对link表进行分组,并仅筛选包含一条记录的组:

SELECT objectid FROM link GROUP BY objectid HAVING COUNT(*) = 1 AND categoryid = 1