Mysql SQL表未正确连接-值仅在WHERE子句中指定时显示

Mysql SQL表未正确连接-值仅在WHERE子句中指定时显示,mysql,sql-server,join,sales-analytics,Mysql,Sql Server,Join,Sales Analytics,这是我的疑问: 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 JO

这是我的疑问:

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')

当我运行这个查询时,我为层次结构组ID和帐户管理范围的某些行(但不是全部)获取空值,即使我知道这些值不是空值。但是,当我添加一个额外的“WHERE[Account ID]=“Specific Value'”时,层次结构组ID和帐户管理范围的值突然出现在刚刚显示空值的特定帐户上。我连接这三个表的方式是否有问题导致了这种情况的发生?

因为您使用的是左连接,所以无论其他表中是否有匹配的行,OpportunityTable中的每一行都会有一行。当没有匹配的行用于联接时,其他表中的列将得到空值。

您在
accounttable
上否定您的
外部联接,因为它包含
where
条件。尽管如此,我认为您的sql没有任何其他问题。你能发布样本数据和期望的结果吗?我是stackoverflow的新手。如何发布sql结果?最简单的方法是创建一个sqlfiddle.com来复制您的问题。不过,您至少需要发布每个表中的样本数据和所需结果(只需使用数据编辑您的问题)。请PS了解返回时的左联接:行上的内部联接将所有不匹配的左表行合并为null扩展。始终知道作为外部联接的一部分,您需要什么样的内部联接。上的WHERE或内部联接,在上的外部联接删除任何由NULL扩展的行后,要求右[sic]表列不为NULL,即在行上只保留内部联接,即“将外部联接转换为内部联接”。你已经知道了。但是对于确实有匹配项的行,它显示为null。但是,当我指定一个特定的帐户ID时,空值会变成值。OpportunityTable中不匹配这两个表的每一行都会得到空值。如果您认为这两者都匹配,但仍然得到空值,则可以显示一些示例数据以及结果