我有这样的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”与左外连接并获得我的所有输出?
答案 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)