MySQL:LEFT JOIN 返回组合行

标签 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

更新:

预期结果:

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                               

如有任何帮助,我们将不胜感激。

最佳答案

由于您使用的是左连接,因此每个 monitoring_checklist_idmonitoring_question_choice_id 的组合(无重复)

如果您不想要组合,则必须以某种方式确定哪个 monitoring_question_choice_id 应该与 monitoring_checklist_id 一起使用(我认为这实际上不可能)

另一种方法是用编程语言处理它,方法是循环所有行并进行不重复的组合

关于MySQL:LEFT JOIN 返回组合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44239806/

相关文章:

mysql查询获取在日期范围内未预订的所有房间未给出预期结果

mysql - LEFT JOIN 与所有连接表的 id 列

mysql - MySQL 中先前计数的平均值

mysql - 获得第n高的薪水

oracle - 用于外连接 (+) 的旧 Oracle 语法是否始终等同于新语法?

c# - 左边加入mysql数据库

mysql - 显示数据库命令在 OS X 的 MAMP 中不显示我的数据库

mysql - 如果只有一行匹配条件,则获取外键的所有行

mysql - 如何在服务器和客户端之间复制数据库并知道两个数据库是否具有相同的数据

mysql - 仅对 JOIN 中的一张表进行 LIMIT