我有两个表。 indRailType
包含一个与我在其他表格中用于指示导轨类型的ID值配对的名称列表。 WO_BreakerRail
包含一个日期列和一个铁路代码列,它对应于indRailType
中的同一代码和一些其他数据。对于每个日期,每种轨道类型的任何活动都有WO_BreakerRail
。所以我可以有3行记录为3/19/2010
,每行代表一个不同的铁路代码,以及发生了什么。使用WHERE子句的左外连接
当我使用下面的LEFT OUTER JOIN
时,我得到了一张包含所有类型的导轨的表格,其中19行没有任何事发生在行中的空值。现在,这只是工作,因为我的WO_BreakerRail
表中现在只有一个日期,第19个。当我用不同日期添加更多行时,事情就会变得不合时宜。
这是我的SQL语句,现在给了我正是我想要的结果:
SELECT WO_BreakerRail.ID, indRailType.RailType, WO_BreakerRail.CreatedPieces,
WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged,
WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop
FROM indRailType
LEFT OUTER JOIN WO_BreakerRail
ON indRailType.RailCode = WO_BreakerRail.RailCode
现在,当我在WHERE WO_BreakerRail.Date = @Date
条款我失去了在什么也没有发生的JOIN
所有行补充。我不想那样。从阅读起,这听起来像是我想要的完整OUTER JOIN
,但SQL Server Compact Edition不支持FULL OUTER JOIN
s。有没有办法解决这个问题,还是我正在寻找其他的东西?
不要忘记考虑@Date的“时间”部分。如果值在午夜和午夜之间可能有所不同,那么必须使用某种形式的between子句。 – 2010-03-23 15:21:03
这个答案完美无缺,谢谢。 菲利普:感谢那个指针,虽然我在这个项目的早些时候遇到了这个问题,但是我最终把它修复到了我的C#代码中,删除了所有的时间部分,每天都会默认到午夜。 – Wesley 2010-03-23 15:30:22
@韦斯利,最好是“落地”日期时间数据类型来消除时间,所以时间是00:00:00.000而不是午夜。 – 2010-03-23 15:32:24