2012-09-08 49 views
11

我有一個2列的表(見下文)。成員可以有多個響應的問題:如何查詢連接表以便滿足多個條件?

RESPONSES 
--------- 
member_id INT 
response_id INT 
SAMPLE DATA 
member_id -- response_id 
    1  --  3 
    1  --  5 
    2  --  1 
    2  --  5 
    2  --  9 
    3  --  1 
    3  --  5 
    3  --  6 

我需要做的就是查詢表,以滿足所有響應標準成員。例如,我需要選擇具有1和5。我使用下面的查詢的RESPONSE_ID所有成員:

SELECT DISTINCT member_id 
FROM responses 
WHERE response_id = 1 AND response_id = 5 

我希望找回member_id的2和3。但是我卻一無所獲返回。我使用了EXPLAIN,它顯示我的where查詢中有一個錯誤。我究竟做錯了什麼?

另外,是否有一個函數類似於IN,其中所有的標準必須滿足才能返回true?

+0

正如我所看到的,您需要'OR'而不是'AND'。 – hjpotter92

+1

您的WHERE條件將單獨應用於每一行。因此,它永遠不會是真的,因爲列不能同時等於1和5。 –

回答

10

這應該工作:

SELECT member_ID 
FROM responses 
WHERE response_ID IN (1,5) 
GROUP BY member_ID 
HAVING COUNT(DISTINCT response_id) = 2 

你需要計算返回的記錄數等於在你的IN條款提供的值的數目。

SQLFiddle Demo

+2

'HAVING COUNT(DISTINCT response_id)= 2'捕獲成員已經兩次應答相同值的情況。 – podiluska

+0

@ podiluska是的,我忽略了這個短語'成員可以有多個問題的答案'。謝謝你。 –

+1

儘管如此,它並不表示會員可以擁有多個*相同*的回覆。儘管如此,OP並未闡明相同的響應是否可行,所以最好放在安全的一邊,並使用COUNT(DISTINCT)'。但我會在我的回答中澄清,如果保證不可能有多個相同的響應,則COUNT(*)會更可取,因爲DISTINCT會增加一些開銷。 –

相關問題