1

我有2张桌子。第一个表充满了条目。第二个表定义了该条目所属的类别:

表格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 的条目。我相信这需要一个子查询,尽管我不太确定。任何帮助任何人?:)

4

2 回答 2

9

了解SQL 连接

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(*)if被替换(entry_id, cat_id)为唯一的tbl2.

于 2012-06-29T15:10:00.480 回答
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 的行(无论如何,这就是我阅读您的问题的方式;我可能误解了“属于多个类别”部分)。

于 2012-06-29T15:10:16.080 回答