我有两张桌子。indRailType包含与ID值配对的名称列表,我在其他表中使用该值来指示轨道类型。WO_BreakerRail包含一个日期列和一个轨道代码列,这两个列对应于indRailType中的相同代码和其他一些数据。在WO_BreakerRail中,每个日期的每种轨道类型上的任何活动都有一行。因此,我可以有3行日期为3/19/2010,每一行表示一个不同的铁路代码,以及发生了什么。
当我使用下面的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 JOINs。有没有办法绕过这个问题,或者我正在寻找完全不同的东西?
发布于 2010-03-23 23:17:50
尝试:
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
AND WO_BreakerRail.Date = @Date从而将AND WO_BreakerRail.Date = @Date添加到连接上
发布于 2010-03-23 23:22:28
谓词条件需要位于连接的On子句中,而不是where子句中。外部连接的工作方式是在分析连接条件后,将“外部”中与内部不匹配的所有行添加回...但这一切都发生在where子句被处理之前。因此,如果where子句谓词从外部连接的外部过滤属性,那么所有这些行都将被再次删除……(它们都是空的)。将谓词放在连接条件中,然后在将缺少的行添加回...
SELECT b.ID, t.RailType, b.CreatedPieces,
b.OutsideSource, b.Charged, b.Rejected,
b.RejectedToCrop
FROM indRailType t
LEFT JOIN WO_BreakerRail b
ON t.RailCode = b.RailCode
And b.Date = @Date发布于 2010-03-23 23:17:14
您可以使用以下where子句:
WHERE WO_BreakerRail.Date = @Date OR WO_BreakerRail.Date IS NULLhttps://stackoverflow.com/questions/2501024
复制相似问题