2014-06-24 138 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之外的项目 –