选择属于多个类别的行

时间:2012-06-29 15:07:44

标签: mysql sql

我有两张桌子。第一个表格中有很多条目。第二个表定义了条目属于哪些类别:

表1:

entry_id | title
       1 | Entry1
       2 | Entry2
       3 | Entry3

表2

entry_id | cat_id
       1 | 233
       1 | 234
       1 | 678
       2 | 235
       2 | 453
       2 | 21
       3 | 234
       3 | 233

我正在尝试选择一个条目,其中包含属于多个类别的所有帖子的单个查询。例如,我想返回属于类别ID 233和234的条目。我相信这需要一个子查询,虽然我不太确定。有人帮忙吗? :)

2 个答案:

答案 0 :(得分:9)

了解SQL joins

SELECT * FROM tbl1 JOIN tbl2 USING (entry_id) WHERE cat_id IN (233,234);

sqlfiddle上查看。


<强>更新

要选择两个类别中的所有条目,您可以对联接的结果进行分组,并仅选择包含这两个类别的组:

SELECT   tbl1.*
FROM     tbl1 JOIN tbl2 USING (entry_id)
WHERE    cat_id IN (233,234)
GROUP BY entry_id
HAVING   COUNT(DISTINCT cat_id) = 2

sqlfiddle上查看。

如果已知COUNT(DISTINCT cat_id) COUNT(*)中的(entry_id, cat_id)是唯一的,tbl2显然可以替换为{便宜得多} {{1}}。

答案 1 :(得分:4)

试试这个:

select * from entity e
where exists (select * from category c where c.entry_id=e.entry_id AND c.cat_id=233)
  and exists (select * from category c where c.entry_id=e.entry_id AND c.cat_id=234)

这将返回属于的行 233和234(无论如何,这是我读你的问题的方式;我可能误解了“属于多个类别”部分)。