【问题标题】:Getting Null Values on a Left Join在左连接上获取空值
【发布时间】:2013-08-30 13:30:00
【问题描述】:

我有以下问题。我正在尝试离开加入另一张桌子。我知道查询应该返回值但值返回为空的事实。有没有人看到我做错了什么?我的大脑在这一点上被炸了。

SELECT 
    ss.NDC,
    ss.ShipToAddressNo,
    ss.QuantityShipped,
    c.AccrualType,
    ss.ExtendedPrice ExtendedPrice,
    c.AccrualAmount CBAccrualAmount
FROM
    SalesSummary ss left join ChargebackAccruals c on
        ss.ClassOfTrade = c.TradeClass and
        c.AddressNo is null and
        c.ShipTo is null and
        c.ShortItemNo is null and
        c.LotNumber is null and
        ss.InvoiceDate = @RunDate and
        ss.InvoiceDate between AccrualBeginDate and AccrualEndDate

【问题讨论】:

  • 您能否提供一个您发现问题所在的示例数据集?

标签: sql sql-server left-join


【解决方案1】:

ON 子句中的任何条件都是连接的一部分,因此在 AddressNo 或 ShipTp 或 ShortItemNo 或 LotNumber 中包含数据的任何行都将被置空。

您可能希望将它们移动到 WHERE。

你想要什么结果?

【讨论】:

    【解决方案2】:

    左外连接从表 A 中产生一组完整的记录,匹配​​的记录(如果可用)在表 B 中。如果没有匹配,则右侧将包含 null。

    【讨论】:

    • 有一个匹配,但是。当我进行正常连接时,我会得到实际的列值,而当我进行左连接时,它们会返回 null...
    • 他们当然返回 null。你是说只在 `c.ShipTo 为空的地方加入`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多