即使缺少一行,也可获得所有主要结果

时间:2017-09-26 22:16:54

标签: php mysql

我有一个小型数据库:表格发票包含每笔销售的发票,表格详细信息包含每笔销售的明细行,每张发票应该有一个或多个详细信息专栏:

enter image description here

在上一张图片中,表发票包含3个销售,其中ID为 1 2 3 。表详细信息仅包含发票 1 3 的明细行,因为有人意外删除了发票 2 的明细行。

现在,我必须创建一个显示所有发票及其故障单类型的报告。我尝试了下一个查询,但发票 2 缺失,因为它没有详细信息行:

SELECT invoices.id,
       detail.ticket_type
  FROM invoices
  JOIN detail
    ON detail.invoice = invoices.id

结果是:

 id            ticket_type
───────────────────────────
 1             adult
 1             child
 3             hot dog

我尝试过具有相同结果的变体,例如:

SELECT invoices.id,
       detail.ticket_type
  FROM detail
  JOIN ( SELECT id
           FROM invoices
       ) AS invoices
    ON detail.invoice = invoices.id

所以,我的问题是:当某些发票没有明细行时,如何才能获得所有发票的ID及其票据类型?在这些情况下, ticket_type 列必须保持空白。

1 个答案:

答案 0 :(得分:2)

使用LEFT JOIN

SELECT invoices.id,
       coalesce(detail.ticket_type, '') ticket_type
  FROM invoices
  LEFT JOIN detail
    ON detail.invoice = invoices.id

请注意已交换的invoicesdetail。使用您希望FROM子句中所有行的表,使用LEFT JOIN添加详细信息。