我有两张桌子。第一个表格中有很多条目。第二个表定义了条目属于哪些类别:
表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的条目。我相信这需要一个子查询,虽然我不太确定。有人帮忙吗? :)
答案 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(无论如何,这是我读你的问题的方式;我可能误解了“属于多个类别”部分)。