左外连接用sql查询中的where

时间:2011-09-27 17:52:51

标签: 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)
from tableC
where
etc....
)

eg years:
2011, 1999, 1901 max is 2011.
1978, 1981,1990 max is 1990.

等。 我遇到的问题是,在“where”语句中,我只获得了更少的1600个数据集;但是,如果我要键入一个值并使用“和”,则输出正确2000。 有没有办法使用“where”与左外连接并获得我的所有输出?

3 个答案:

答案 0 :(得分:1)

如果从WHERE子句中的LEFT JOINed表中测试列,则强制该连接的行为就像它是INNER JOIN一样。正确的方法是使该测试成为连接条件的一部分。

答案 1 :(得分:1)

LEFT JOIN中,无论是将过滤器放入JOIN子句还是放入WHERE子句,都会有所不同。

我在这里解释了非常详细的差异:
What is the difference in these two queries as getting two different result set?

用一句话概括:
如果你想要完整的2000行而不只是1600,你必须将过滤器放在JOIN子句中。

答案 2 :(得分:0)

为什么不把条件作为连接的一部分(因为你发布了?somedate必须来自右表,即tableA,所以它可能是null。所以如果你想得到所有的结果,你必须考虑到这一点,例如

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

(somedate = '1/1/2000' OR somedate is null)