MYSQL连接多个列上没有唯一ID的表

时间:2016-02-27 19:24:47

标签: mysql join

我有以下表格:

表主:

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,这很容易解决,但在这种情况下,这不是一个选项。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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' )

答案 1 :(得分:0)

你可以使用左连接和子表值为空的情况加入三个字段的表吗?

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;