2012-06-29 84 views
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的條目。我相信這需要一個子查詢,儘管我不太確定。任何幫助任何人? :)

+0

對不起,我應該指定這個。返回的條目需要屬於所有類別。它應該是交叉點,而不是工會 – Macgyver

回答

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行(這是我看了你的問題,無論如何,我可能誤解了「屬於多個類別」的一部分) 。

+0

yep就是這樣,謝謝! – Macgyver

8

瞭解有關SQL joins

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

請參閱sqlfiddle


UPDATE

類別選擇所有條目,你可以組結果的加入,只選擇那些有包含這兩類羣體:

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上查看。

如果(entry_id, cat_id)tbl2中已知是唯一的,那麼COUNT(DISTINCT cat_id)顯然可以用(更便宜)COUNT(*)代替。

+0

哇,我的方式過度複雜,在我的腦海中。這不是加入,而是因爲某種原因,我正在進行大腦放屁。 – Macgyver

+0

好的,實際上,我認爲這實際上並不能解決我遇到的問題。我需要這個功能,作爲一個AND – Macgyver

+0

@Macgyver:在這種情況下,[@ dasblinkenlight的答案](http://stackoverflow.com/a/11264317/623041)是做你想做的一種方式。還有一個,我會盡快更新我的答案。 – eggyal