【问题标题】:Query returning data about nested elements查询返回有关嵌套元素的数据
【发布时间】:2019-08-19 17:35:55
【问题描述】:

我的数据库中有三个表:

boards: idBoard, nameBoard, author
sections: idSection, nameSection, idBoard
tasks: idTask, nameTask, idSection

我的查询如下所示:

SELECT tasks.idTask, sections.idSection, (more...) 
FROM `tasks` 
    INNER JOIN `boards` ON tasks.idBoard = boards.idBoard 
    INNER JOIN `sections` ON sections.idSection = tasks.idSection 
WHERE boards.idBoard = ? 
AND boards.author= ?

查询运行良好,但它不返回没有 tasks 项目的 sections。 不幸的是,我真的不知道它为什么会这样。我还想获得与boards 匹配但没有tasks 项目的section 项目

【问题讨论】:

  • 您知道INNER JOIN 的工作原理吗?你知道除了INNER JOIN之外的其他类型的连接吗? (提示:LEFT JOIN
  • 您的查询引用了tasks.idBoard,它不在您描述的表格中。
  • 请提供SHOW CREATE TABLE
  • 您可能需要INDEX(author, idBoard)(以任意顺序)。

标签: mysql sql database mariadb


【解决方案1】:

我想你想要外连接,这通常意味着left join。根据您描述表格的方式,我希望查询看起来像这样:

SELECT t.idTask, s.idSection, (more...) 
FROM boards b LEFT JOIN
     sections s
     ON b.idBoard = s.idBoard 
     tasks t
     ON s.idSection = t.idSection 
WHERE b.idBoard = ?  AND boards.author= ?

【讨论】:

    【解决方案2】:

    我认为您的查询有误。 tasks 表在您的帖子中没有名为“idBoard”的列。

    这个怎么样?

    SELECT tasks.idTask, sections.idSection, (more...) 
    FROM `tasks` 
    INNER JOIN `sections` ON sections.idSection = tasks.idSection     
    INNER JOIN `boards` ON sections.idBoard = boards.idBoard   
    
    WHERE boards.idBoard = ? 
    AND boards.author= ?
    

    你能详细解释一下你想要什么吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多