【发布时间】:2016-03-16 13:00:35
【问题描述】:
这是我的查询:
SELECT
a.[Hierarchy Group ID],
o.[Opportunity ID],
o.[Opportunity Name],
o.[ARR],
o.[TCM],
p.[Product Group],
a.[Account Management Scope],
FROM OpportunityTable as o
LEFT JOIN AccountTable as a ON o.[Account ID]=a.[Account ID]
LEFT JOIN ProductTable as p ON o.[Product Lookup]=p.[Product ID]
WHERE
o.[Stage] = 'Value'
a.[Account Management Scope] in ('Value 1','Value 2','Value 3')
当我运行此查询时,我为 Hierarchy Group ID 和 Account Management Scope 的某些行(但不是全部)获得了空值,即使我知道这些值不为空。但是,当我添加一个额外的“WHERE [Account ID] = 'Specific Value'”时,Hierarchy Group ID 和 Account Management Scope 的值突然出现在那个只显示空值的特定帐户上。我加入这三个表的方式是否有问题导致这种情况发生?
【问题讨论】:
-
您在
accounttable上否定了您的outer join,因为您在其中包含了where标准。尽管如此,我看不出你的 sql 有什么问题。你能发布样本数据和期望的结果吗? -
我是 stackoverflow 的新手。如何发布sql结果?
-
最简单的方法是创建一个 sqlfiddle.com 来复制您的问题。但是,您至少需要发布每个表格中的示例数据和所需的结果(只需使用数据编辑您的问题)。
-
minimal reproducible example 请。 PS 了解 LEFT JOIN ON 返回什么:INNER JOIN ON rows UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 在 OUTER JOIN ON 删除任何由 NULL 扩展的行后,需要右 [sic] 表列不为 NULL,即只留下 INNER JOIN ON 行,即“将 OUTER JOIN 转换为 INNER JOIN”。你有那个。
标签: mysql sql-server join sales-analytics