【发布时间】:2020-10-17 08:58:11
【问题描述】:
我正在使用 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;
【问题讨论】:
-
这个连接谓词在我看来有点可疑 -
ON i_n.InvoiceId = c.CustomerId;,Invoice表中是否有CustomerID列,如果有,那么您可能应该加入该列而不是 @ 987654327@ -
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
您可能需要像
il.tid=t.tid、il.iid=i.iid和i.cid=c.cid这样的测试。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。