2

以下の簡略化された例のように、MySQLで多対多の関係を使用しています。私がやりたいのは、カテゴリIDを指定し、そのカテゴリに含まれるオブジェクトを見つけて、そのカテゴリのみを検索することです。

カテゴリ内のすべてのオブジェクトを簡単に取得できます。

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

これにより、object1とobject2が得られますが、object2もcategory2に含まれているため、必要なのはobject1だけです。

私が考えることができた唯一のことは、これをサブクエリとして使用して、それらのオブジェクト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           |
+-----------+-------------+
4

1 に答える 1

2

You can group the link table by object and filter for only those groups containing one record:

SELECT objectid FROM link GROUP BY objectid HAVING COUNT(*) = 1 AND categoryid = 1
于 2012-06-06T16:15:01.680 に答える