如何使用MySQL关联表返回当前未分配给条目的类别

时间:2011-11-02 19:51:11

标签: mysql

我有一个产品条目数据库。每个产品条目可以与多个类别相关联。我创建了一个关联表来创建这些关联。我要做的是创建一个MySQL查询,它将返回当前未分配给该条目的所有类别。

因此,如果一个条目是一个Pool Table并且它已经被分配到游戏类别,我想创建一个返回除Gaming之外的所有类别的查询。

以下是我的数据库的表结构。任何帮助将不胜感激。

条目表:

+--------------+------------------+
| Field        | Type             |
+--------------+------------------+
| eid          | int(10) unsigned |
| entry_name   | varchar(50)      |
+--------------+------------------+

类别表:

+----------------+------------------------+
| Field          | Type                   |
+----------------+------------------------+
| cid            | smallint(11) unsigned  |
| cat_name       | varchar(30)            |
+----------------+------------------------+

协会表:

+-------+-----------------------+
| Field | Type                  |
+-------+-----------------------+
| eid   | int(10) unsigned      |
| cid   | smallint(11) unsigned |
+-------+-----------------------+

2 个答案:

答案 0 :(得分:1)

SELECT c.cid, c.cat_name
FROM Category c
where not exists (
  select 1
  from Association a
  where a.cid = c.cid
)

答案 1 :(得分:1)

我能够通过nick rulez提示来解决这个问题。

此查询返回尚未分配给特定条目的类别。在此示例中,条目id为493:

select c.* from category c left join Association a on a.pid = c.pid and a.eid = '493' where a.eid is NULL

不确定这是否是最有效的方法,但确实有效。