首页 > 解决方案 > 具有查阅字段的 SQL 查询

问题描述

我有一个包含 3 个字段的表 Invoices:

InvoiceProductCode InvoiceQuantity InvoicePrice

InvoiceProductCode 可以为空,但如果它不为空,我希望它填充 Products 表中的值。

示例 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 的行被忽略。

有什么建议吗?

谢谢。

标签: mysqlsql

解决方案


我想你想要left join

select coalesce(p.ProductName, ipc.InvoiceProductCode), . . . 
from InvoiceProductCode ipc left join
     Products p
     on ipc.InvoiceProductCode = p.ProductCode

推荐阅读