sql查询中带有where的左外部联接

sql查询中带有where的左外部联接,sql,join,Sql,Join,我有这样一个sql查询: select something from ( inner query here - outputs is correct: eg 2000 datasets ) as a left outer join tableA on tableA.id=innerQuery.id where someYear = -----------> had to change this "and" to "where" ( select max(tableYear) f

我有这样一个sql查询:

    select something
from
(
inner query here - outputs is correct: eg 2000 datasets
) as a

left outer join tableA
on tableA.id=innerQuery.id
where  someYear = -----------> had to change this "and" to "where"
(
select max(tableYear)
from tableC
where
etc....
)

eg years:
2011, 1999, 1901 max is 2011.
1978, 1981,1990 max is 1990.
等等。。 我遇到的问题是,使用where语句,我只能获得更少的1600个数据集;然而,如果我输入一个值并使用它,输出结果会正确。
有没有一种方法可以将where与左外部联接一起使用并获取我的所有输出?

如果在where子句中测试左联接表中的一列,则会强制该联接的行为就像它是一个内部联接一样。正确的方法是将该测试作为连接条件的一部分。

为什么不将该条件作为您发布的连接条件的一部分?somedate必须来自正确的表,即tableA,因此它可能为空。因此,如果你想得到所有的结果,你必须考虑到这一点

IsNull(somedate, '1/1/2000') = '1/1/2000'

在左连接中,将筛选器放入JOIN子句还是WHERE子句会产生不同

我在这里非常详细地解释了差异:

用一句话概括一下:
如果您想要完整的2000行,而不仅仅是1600行,那么必须将筛选器放入JOIN子句。

您能澄清一下吗?您希望将比较作为联接条件的一部分执行,还是作为最终结果的独立条件执行?somedate在哪张桌子上?为什么要用where?另外,我不认为数据集是你想说的正确术语。您将获得2000行,这构成了1个数据集。是的,我希望将比较作为左外部联接的一部分执行,因为字段名和该比较仅存在于tableA中,并且仅适用于tableA。此外,内部查询值和taleA值仅与ID相同。这意味着,内部查询中有一些人将不存在于tableA中。反之亦然。是的,这正是正在发生的事情,我如何使该测试成为联接条件的一部分?@Menew:只需在左侧联接上添加带有AND的测试。当我这样做时,sql会给我一个错误,说明on子句是正确的invalid@Menew:我想我们需要看到更多的代码细节,特别是查询中的select MaxYear部分。我刚刚包括了MaxYear。max只选择了max year,例如:1999、1901、2011==>2011这正是我要找的,但是,我想选择max?@Menew:对不起,我还不知道。我在您的示例代码中看到了select maxYear,但我不明白这与连接有什么关系,以及您现在的问题到底是什么。你能详细说明一下吗?好的,如果我给它一个最长的年份,比如说2011年,我的代码是有效的。这意味着,它将给我从2011年所有电影的每个人。但是,我也希望来自内部查询(即我的电影数据库)的人有不是2011年的电影。@Menew:我仍然不确定是否得到它。如果你给它一个2011年的最长年份,但是你想取回任何人,不管他们的电影是从哪一年开始的,你为什么需要最长年份查询?并且,你能澄清一下吗:在哪一个表中是你试图过滤的someYear列?在innerQuery或tableA中?好的,所以我把它添加到我的查询中,它在某时工作。日期为空!非常感谢,我忽略了你的答案!
(somedate = '1/1/2000' OR somedate is null)