【问题标题】:MySql: Getting sum of a table by the id of its parent from other table and return all children with sum values that are relevant to parent_idMySql:通过其父表的ID从其他表中获取表的总和,并返回具有与parent_id相关的总和值的所有子表
【发布时间】:2016-04-06 02:32:43
【问题描述】:

想象一下这些是我的数据库的表:

Table #1: child
╔══════════╦═════════════════╦═══════╗
║Child_id  ║Primary key - AI ║ int   ║
╠══════════╬═════════════════╬═══════╣
║parent_id ║Index-Forign_key ║ int   ║
║══════════╬═════════════════╬═══════╣
║title     ║        -        ║varchar║                   
╚══════════╩═════════════════╩═══════╝

Table #2: Paid
╔══════════╦═════════════════╦═══════╗
║Paid_id   ║Primary key - AI ║ int   ║
╠══════════╬═════════════════╬═══════╣
║child_id  ║Index-Forign_key ║ int   ║
║══════════╬═════════════════╬═══════╣
║paid_price║        -        ║int    ║                   
╚══════════╩═════════════════╩═══════╝

这是我的表格值:

Table: child (data)
╔══════════╦══════════╦═══════╗
║ Child_id ║parent_id ║ title ║
╠══════════╬══════════╬═══════╣
║ 1        ║25        ║bla-bla║
║══════════╬══════════╬═══════╣
║ 2        ║25        ║bla-bla║
║══════════╬══════════╬═══════╣
║ 3        ║5         ║bla-bla║
║══════════╬══════════╬═══════╣
║ 4        ║25        ║bla-bla║
╚══════════╩══════════╩═══════╝

 Table: paid (data)
╔══════════╦══════════╦════════════╗
║ Paid_id  ║Child_id  ║ paid_price ║
╠══════════╬══════════╬════════════╣
║ 1        ║1         ║100         ║
║══════════╬══════════╬════════════╣
║ 2        ║2         ║250         ║
║══════════╬══════════╬════════════╣
║ 3        ║1         ║35          ║
║══════════╬══════════╬════════════╣
║ 4        ║1         ║17          ║
╚══════════╩══════════╩════════════╝

我有一个查询,它从子表中返回(获取)所有 child_id,然后通过该 ids 返回它们每个的 sumpaid_price。

这是我的查询:

SELECT child.Child_id, child.parent_id, sum(paid.paid_price)
FROM paid
JOIN child ON child.Child_id = paid.Child_id
WHERE child.parent_id =25
group by child.Child_id, child.parent_id

RESULT AND DEMO

我想要这个:现在我的查询运行良好,但是当paid 表中没有child_id 时,查询不会返回它。 我的意思是我想要所有child_id 天气他们是否在paid 表中。如果它们不返回 0 (现在我认为它是 null 并且不返回)

请查看我的演示(上面的链接)并查看如果我输入 parent_id=25 它将返回 2 行(总和),因为 child_id = 3 确实不存在于 paid 中并且不会在结果中返回它

【问题讨论】:

    标签: mysql sql database performance


    【解决方案1】:

    你需要的是一个左连接(并颠倒表格的顺序)或一个不太常见的右连接:

    select
      parent.Child_id,
      parent.parent_id,
      coalesce(sum(paid.paid_price), 0)
    from
      parent left join paid
      on parent.Child_id = paid.Child_id
    where
      parent.parent_id =25
    group by
      parent.Child_id,
      parent.parent_id
    ;
    

    LEFT JOIN 将返回左侧表中的所有行,以及右侧表中的所有匹配行。如果不匹配,则右侧表中的列将为空。

    Coalesce 将返回第一个非空值,因此如果 sum() 为空,它将返回 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 2018-12-08
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多