sql - 加入 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;
解决方案
从要保留所有内容的表开始,然后使用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
推荐阅读
- django - Django:如何根据当前用户使用 APIView 从多个地址实例中删除一个
- python - 您将如何使用以下信息使用 Python 创建代码?
- python - 如果先前已添加,则在列表中添加下一个元素
- css - 从浏览器打印在 PDF 中生成“ft”和“ti”作为单个字符
- javascript - 如何将 jsdoc 类型添加到解构变量?(VS代码)
- python - 使用 BeautifulSoup 访问 Yelp 评论页面的“aria-label”
- c++ - 如何在 C++ 中调试内部函数时观察全局数组发生了什么?
- python - 提高python中指数字符串的效率
- php - 在 WooCommerce 中使用“阅读更多”切换截断简短描述
- python - Twitter API 版本 2 不适用于 OAuth 1