首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有WHERE子句的左外部连接

带有WHERE子句的左外部连接
EN

Stack Overflow用户
提问于 2010-03-23 23:14:06
回答 6查看 94.6K关注 0票数 28

我有两张桌子。indRailType包含与ID值配对的名称列表,我在其他表中使用该值来指示轨道类型。WO_BreakerRail包含一个日期列和一个轨道代码列,这两个列对应于indRailType中的相同代码和其他一些数据。在WO_BreakerRail中,每个日期的每种轨道类型上的任何活动都有一行。因此,我可以有3行日期为3/19/2010,每一行表示一个不同的铁路代码,以及发生了什么。

当我使用下面的LEFT OUTER JOIN时,我得到了一个包含所有类型的轨道的表,在19号没有发生任何事情的行中有空值。现在,这只起作用了,因为我的WO_BreakerRail表中现在只有一个日期,也就是19日。当我添加更多具有不同日期的行时,事情会变得混乱。

这是我的SQL语句,它现在给出了我想要的结果:

代码语言:javascript
运行
复制
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。有没有办法绕过这个问题,或者我正在寻找完全不同的东西?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-23 23:17:50

尝试:

代码语言:javascript
运行
复制
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添加到连接上

票数 48
EN

Stack Overflow用户

发布于 2010-03-23 23:22:28

谓词条件需要位于连接的On子句中,而不是where子句中。外部连接的工作方式是在分析连接条件后,将“外部”中与内部不匹配的所有行添加回...但这一切都发生在where子句被处理之前。因此,如果where子句谓词从外部连接的外部过滤属性,那么所有这些行都将被再次删除……(它们都是空的)。将谓词放在连接条件中,然后在将缺少的行添加回...

代码语言:javascript
运行
复制
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
票数 18
EN

Stack Overflow用户

发布于 2010-03-23 23:17:14

您可以使用以下where子句:

代码语言:javascript
运行
复制
WHERE WO_BreakerRail.Date = @Date OR WO_BreakerRail.Date IS NULL
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2501024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档