【问题标题】:SQL query that has a lookup field具有查阅字段的 SQL 查询
【发布时间】:2021-03-29 20:18:30
【问题描述】:

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

发票产品代码 发票数量 发票价格

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

有什么建议吗?

谢谢。

【问题讨论】:

  • 查看:LEFT JOIN - 返回第一个表中的所有行,并且只返回第二个表中存在的行。
  • 编辑您的问题并显示您正在使用的查询。同时标记数据库。
  • @Brad 可能是我的错误......由于某种原因,Left Join 早些时候没有工作。谢谢!
  • @GordonLinoff 谢谢。我刚刚编辑了它。 mysql.

标签: mysql sql


【解决方案1】:

我想你想要left join:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    相关资源
    最近更新 更多