2017-05-29 69 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