2016-02-27 59 views
1

我有以下表格:MYSQL连接表上多列中没有唯一的ID

表主营:

TestNumber PassageNumber QuestionNumber 
1    1    1 
1    1    2 
1    1    3 
1    2    1 
1    2    2 
1    2    3 

表儿童:

TestNumber PassageNumber QuestionNumber User SelectedAnswer 
1    1    1     X  A 
1    2    2     X  B 

我要显示的数据基于测试编号和用户不在子表中的主表。所以我期待的结果如下,其中从主表中的行是那些不是在孩子:

TestNumber PassageNumber QuestionNumber 
1    1    2 
1    1    3 
1    2    1 
1    2    3 

我曾尝试下面的查询和变化,没有运气:

SELECT a.passagenumber, a.questionnumber FROM Main a left outer join 
Child b on a.testnumber=b.testnumber where b.user = 'X' 
and b.testnumber=1 and a.testnumber=1 and b.selectedanswer is not null 

我了解我是否有一个唯一的ID这很容易解决,但在这种情况下,这不是一个选项。任何帮助将非常感激。

回答

1

我瘦,你可以使用不

SELECT a.passagenumber, a.questionnumber FROM Main a 
where (a.testnumber, a.passagenumber, a.questionumber) 
     not in (select b.testnumber, b.passagenumber, b.questionumber 
        from Child b where b.user = 'X') 
+0

是的,非常感谢这么多 – Maxqueue

0

,您可以加入对三个字段的表,使用LEFT JOIN和那里的孩子表值为空?

SELECT p.TestNumber 
     ,p.PassageNumber 
     ,p.QuestionNumber 
FROM Parent p 
     LEFT JOIN Child c ON c.TestNumber = p.TestNumber 
           AND c.PassageNumber = p.PassageNumber 
           AND c.QuestionNumber = p.QuestionNumber 
           AND c.[User] = 'X' 
WHERE c.TestNumber IS NULL;