mysql - 具有查阅字段的 SQL 查询
问题描述
我有一个包含 3 个字段的表 Invoices:
InvoiceProductCode InvoiceQuantity InvoicePrice
InvoiceProductCode 可以为空,但如果它不为空,我希望它填充 Products 表中的值。
- 产品表 - ProductCode ProductName
示例 2 行数据
InvoiceProductCode InvoiceQuantity InvoicePrice
3 2 5
1 10
SELECT InvoiceProductCode, InvoiceQuantity, InvoicePrice from Invoices
INNER JOIN Products ON InvoiceProductCode = Products.ProductCode
WHERE InvoiceNumber=3
即使第二行的 InvoiceProductCode 为空(或零),我也希望返回两行,只是只有第一行会有 ProductName;第二行的 ProductName 将为空。我想在不使用查找表的情况下在 SQL 中执行此操作。
所以最终结果应该看起来像 2 行:
InvoiceProductCode ProductName Invoice Quantity Invoice Price
3 Laptop 2 5
0 1 10
而不仅仅是 1 行:
InvoiceProductCode ProductName Invoice Quantity Invoice Price
3 Laptop 2 5
如何构建查询?ProductCode 上的 INNER JOIN 只会给我 1 行 - 具有非空 ProductCode 的行,但没有 ProductCode 的行被忽略。
有什么建议吗?
谢谢。
解决方案
我想你想要left join
:
select coalesce(p.ProductName, ipc.InvoiceProductCode), . . .
from InvoiceProductCode ipc left join
Products p
on ipc.InvoiceProductCode = p.ProductCode
推荐阅读
- swift - 如何使 vstack 或垂直分页这个视图?
- extjs - 在 tabPanel extJS 上添加新选项卡
- kubernetes-helm - Helm 无法评估类型接口 {} 中的字段值
- node.js - 从来自 mongodb 的对象中删除 _id 不起作用
- ios - 将 Siri 功能添加到收音机应用程序的基本步骤
- android - 如何在 android 中为 ssl socketchannel 使用 Conscrypt 库?
- microsoft-graph-api - 我已设法为新的电子邮件到达创建订阅,但 Microsoft Graph API 没有通知它
- apache-spark - Persist 中的阶段仅运行 1 个任务,导致溢出到磁盘
- karate - 如何导航和验证 api 响应的所有页面
- asp.net-core - 如何在 cPanel 中托管 ASP.Net Core API?