2015-11-04 53 views
2

我有2個表questiontag,問題表中有1行可能具有多於標籤的問題。如何在同一個表的多行中獲取匹配的WHERE子句?

表可能看起來像:

question 
    --------- 
    id | subject 
    ------------ 
    1 | foo 


    tag 
    ------------------------------ 
    id | name | question_id 
    ------------------------------ 
    1 | bar | 1 
    2 | abc | 1 
    3 | bar | 2 

*什麼我想要得到的是具有所有指定標籤的問題*所以我要查詢來獲取「foo」的上述情況。問題,當我通過酒吧和ABC作爲標籤。

IN條款顯然不會在這種情況下工作,因爲它會返回「foo」的問題,如果它有bar或ABC作爲標籤:

select q.* from question q 
where q.id in (select t.question_id from tag t where t.name in ('bar', 'abc')); 

有人可以幫我想出了正確的查詢?

+1

雙引號用於分隔標識符,例如, 「question_id」。單引號用於字符串文字,例如'酒吧'。 – jarlh

+0

對不起,這是我剛剛編寫的僞查詢。你對單引號是正確的,謝謝指出。我已經修復了在查詢中使用正確引號的問題 –

回答

4

您可以通過聚集和having做到這一點:

select question_id 
from tag 
where name in ('abc', 'bar') 
group by question_id 
having count(*) = 2; 
+0

非常感謝,這正是我想要的! –

0
select q.subject, 
from question q 
    join tag t on q.id = t.question_id 
group by q.subject 
having count(distinct t.name) = (select count(distinct name) from tag) 

名單,如果它的所有標籤無論有多少不同的標籤有一個主題。

相關問題