2014-06-24 137 views
0

在MySQL數據庫中,我們有三個表:「Answers」,「Items」和「AnswerItems」,它們鏈接在前兩個表之間。MySQL - 多對多關係 - 表

解答表

AnswerID

(和其他列)

===================

項目表

ItemID

(和其他列)

==================

AnswerItems表

AnswerID

的ItemID

========= ======

現在,我們希望得到的是有一定的項目(不是更多或更少)

我們試圖(假設我們正在尋找answe答案FirstItemID和SecondItemID)

select AnswerID 
from AnswerItems 
where ItemID in (FirstItemID,SecondItemID) 
group by AnswerID 
having COUNT(distinct ItemID) = 2 

此查詢還會返回有其他項目所選擇的兩個項目以上

SQL小提琴答案:http://sqlfiddle.com/#!2/d9124/3

+1

你能爲此發佈sqlfiddle嗎? – DevelopmentIsMyPassion

+0

它工作嗎? http://sqlfiddle.com/#!2/d9124/4 –

+1

在你必須證明'DISTINCT ItemId'或者如果你使用AnswerID你刪除了'DISTINCT'。 「獨特」使結果獨一無二。在你的情況下,你總是會得到1 – lopo

回答

1

要找到AnswerID只有項目ID具有ID的項目RS 1和2:

SELECT * 
FROM AnswerItems t1 INNER JOIN (
    SELECT AnswerID 
    FROM AnswerItems 
    WHERE ItemID in (1, 2) 
    GROUP BY AnswerID 
    HAVING COUNT(DISTINCT ItemID) = 2 
) t2 ON t1.AnswerID = t2.AnswerID 
GROUP BY t1.AnswerID 
HAVING COUNT(*) = 2; 
0

你可以試試下面

SELECT * FROM AnswerItems 
where ItemID in (1,2) 
group by Answerid having count(*) = 2 
+0

我認爲這個查詢將返回有項目1 + 2(+其他項目)的答案。我的意思是這個查詢將返回一個有1 + 2 + 3或1 + 2 + 4項的答案嗎? –

+0

@MegamindSaiko對不起還沒有得到它 – DevelopmentIsMyPassion

+0

這個查詢將返回有項目1和2的答案 - 這個好,但也會返回項目1,2和3或1,2或4或1,2和6的答案 - - 我們需要得到的答案不包含1和2之外的項目 –