首页 > 解决方案 > 加入 4 个表会遗漏很多行,不知道为什么

问题描述

我正在使用 Chinook 数据库来练习 SQLite,然后添加更多搜索参数以增加严谨性。

我正在尝试提供一个查询,其中包括跟踪名称和客户名称以及每个发票行项目和每个跟踪的金额。

发票行项目表中有 2240 个发票行项目,发票表中有 412 个发票,但下面的代码只显示 59 个结果,即客户总数。

我遗漏了什么阻止查询显示所有 2240 行?

SELECT i.InvoiceLineId as 'Invoice Line ID', t.Name as 'Name of track purchased', i.UnitPrice as '$ Amount for Track', c.FirstName || ' ' || c.LastName as 'Customer Name'
FROM Track as t
JOIN InvoiceLine as i
    ON t.TrackId = i.InvoiceLineId
JOIN Invoice as i_n
    ON i.InvoiceLineId = i_n.InvoiceId
JOIN Customer as c
    ON i_n.InvoiceId = c.CustomerId;

标签: sqlsqlitejoin

解决方案


从要保留所有内容的表开始,然后使用left join

FROM Invoice i_n LEFT JOIN
     InvoiceLine i
     ON i.InvoiceLineId = i_n.InvoiceId LEFT JOIN
     Track as t
     ON t.TrackId = i.InvoiceLineId LEFT JOIN 
     Customer as c
      ON i_n.InvoiceId = c.CustomerId

推荐阅读