2017-05-29 32 views
0

我有三个表,我试图查询这三个表以获得我想要的结果(没有组合的行),但是在结果行中进行组合。MySQL:LEFT JOIN返回组合行

这里是表:

monitoring table 
id | code 
12 | M-12 

monitoring_question_log table 
id | monitoring_id | monitoring_question_id | monitoring_question_choice_id | textual_answer 
11  12    1       1        (NULL) 
12  12    2       4        (NULL) 
13  12    3       6        (NULL) 
14  12    4       10        (NULL) 
15  12    5       14        (NULL) 
16  12    6       15        (NULL) 
17  12    7       (NULL)       N/A 

monitoring_checklist_log table 
id | monitoring_id | monitoring_checklist_id | answer 
23  12    1       checked 
24  12    2       unchecked 
25  12    3       checked 
26  12    4       checked 

这里是我使用的查询:

SELECT 
    m.id, 
    m.code, 
    mql.monitoring_question_choice_id, 
    mql.textual_answer, 
    mcl.monitoring_checklist_id, 
    mcl.answer 
FROM monitoring m 
    LEFT JOIN monitoring_question_log mql ON mql.monitoring_id = m.id 
    LEFT JOIN monitoring_checklist_log mcl ON mcl.monitoring_id = m.id 
WHERE m.id = 12 

上述查询的结果是:

id code monitoring_question_choice_id textual_answer monitoring_checklist_id answer 
12 M-12   1       (NULL)    1    checked 
12 M-12   1       (NULL)    2    unchecked 
12 M-12   1       (NULL)    3    checked 
12 M-12   1       (NULL)    4    checked 
12 M-12   4       (NULL)    1    checked 
12 M-12   4       (NULL)    2    unchecked 
12 M-12   4       (NULL)    3    checked 
12 M-12   4       (NULL)    4    checked 
12 M-12   6       (NULL)    1    checked 
12 M-12   6       (NULL)    2    unchecked 
12 M-12   6       (NULL)    3    checked 
12 M-12   6       (NULL)    4    checked 
12 M-12   10       (NULL)    1    checked 
12 M-12   10       (NULL)    2    unchecked 
12 M-12   10       (NULL)    3    checked 
12 M-12   10       (NULL)    4    checked 
12 M-12   14       (NULL)    1    checked 
12 M-12   14       (NULL)    2    unchecked 
12 M-12   14       (NULL)    3    checked 
12 M-12   14       (NULL)    4    checked 
12 M-12   15       (NULL)    1    checked 
12 M-12   15       (NULL)    2    unchecked 
12 M-12   15       (NULL)    3    checked 
12 M-12   15       (NULL)    4    checked 
12 M-12   (NULL)      N/A    1    checked 
12 M-12   (NULL)      N/A    2    unchecked 
12 M-12   (NULL)      N/A    3    checked 
12 M-12   (NULL)      N/A    4    checked 

UPDATE:

预期结果:

id code monitoring_question_choice_id textual_answer monitoring_checklist_id answer 
12 M-12   1       (NULL)    1    checked 
12 M-12   4       (NULL)    2    unchecked 
12 M-12   6       (NULL)    3    checked 
12 M-12   10       (NULL)    4    checked 
12 M-12   14       (NULL)        
12 M-12   15       (NULL)        
12 M-12   (NULL)       N/A        

任何帮助,将不胜感激。

+0

SELECT DISTINCT * ........其余 – DaAmidza

+1

INNER连接怎么样?或者像阿尔斯兰提到的那样清晰。 – tilz0R

+0

@ Arslan.H,谢谢你的回答,但是,我已经尝试过了。 – skm

回答

0

谢谢你们的帮助。

我找到了解决此问题的方法;由于我不想使用组合数据,因此我处理这种情况的方式不是使用LEFT JOIN,而是分别查询每个表格并获得我期望的结果。

2

由于您使用左加入了让每一个monitoring_checklist_idmonitoring_question_choice_id(不重复)

的组合,如果你不想你将不得不以某种方式确定组合哪些monitoring_question_choice_id应该有monitoring_checklist_id(我没有看到实际可能的话)

另一种方法是你处理它在你的编程语言通过循环周围的所有行,使组合没有重复

+0

为什么不在右表中使用“GROUP BY”不同的值? – Martin