为什么我的 t-sql 左连接不起作用?

2023-12-02

你能运行这个并告诉我为什么结果集只有两行吗?它应该有三个,看起来像这样......

appId    stepId       section       start
101      1           Section 1     2016-01-03 00:00:00.000
101      2           Section 2     2016-01-03 00:00:00.000
101      10          Section 3     NULL

这是sql,因此您可以将其粘贴到查询工具中

create table #appSteps(stepId decimal, section nvarchar(50))
insert into #appSteps (stepId, section) values (1, 'Section 1')
insert into #appSteps (stepId, section) values (2, 'Section 2')
insert into #appSteps (stepId, section) values (3, null)
insert into #appSteps (stepId, section) values (4, null)
insert into #appSteps (stepId, section) values (10, 'Section 3')

create table #appProgress(stepId decimal, appId int, start datetime)
insert into #appProgress (stepId, appId, start) values (1, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (2, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (3, 101, '1/3/2016')
insert into #appProgress (stepId, appId, start) values (4, 101, '1/3/2016')


select p.appId, s.stepId, s.section, p.start
from #appSteps s with (nolock)
left join #appProgress p on s.stepId = p.stepId
where s.section is not null
and p.appId = 101

drop table #appSteps
drop table #appProgress

我不明白为什么 #appSteps 中的所有 3 个非空行都没有返回


原因是因为您将右侧表格包含在WHERE条款。您应该将其移至ON的条件LEFT JOIN:

Select    P.appId, S.stepId, S.section, P.start
From      #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where     S.section Is Not Null

它这样做的原因是因为WHERE条款被评估after the LEFT JOIN,然后过滤掉你的NULL结果来自LEFT JOIN.

包括右边的表LEFT JOIN(或者左边的表RIGHT JOIN) 在里面WHERE条款有效地改变了OUTER JOIN进入一个INNER JOIN.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 t-sql 左连接不起作用? 的相关文章

随机推荐

  • 什么是投影和选择?

    投影和选择有什么区别 是吗 投影 gt 用于选择表的列 和 选择 gt 选择表的行 那么投影和选择分别是垂直和水平切片吗 Exactly 投影意味着选择哪些列 或表达式 查询应返回 选择 means 哪些行将被退回 如果查询是 select
  • 如何让物体沿圆弧路径运动?

    我正在制作一个游戏 其中应该有一个机器人向另一个机器人扔球形物体 投出的球应以对称的弧线飞行 很确定这个数学词是抛物线 两个机器人都在 x 轴上 我怎样才能在我的游戏中实现这样的事情 我尝试了不同的方法 但没有一个有效 我的游戏中当前移动物
  • 透明背景模糊的 JFrame

    我想对 JFrame 的背景进行模糊处理 该背景是透明的以显示其下方发生的情况 但我不知道如何模糊背景并避免闪烁 我想要实现的是拥有一个稍微模糊的透明背景 但仍然显示其下方窗口的 实时视图 而不是拥有不改变的模糊静态图片 请记住 窗口可能会
  • Laravel 中的二维码

    我想制作qr码 在那里我可以制作它 但是当我想将qr码的格式更改为png文件时遇到麻烦 但它唯一的显示符号 这是我的观点 我使用这个二维码 simplesoftwareio simple qrcode 1 这是我的参考 https www
  • 对自己调用复制构造函数

    我很好奇我几乎错误地编写的这段代码中发生了什么 include
  • 将图像从网页的 html 部分拖放到画布上后如何访问图像数据?

    这是一个后续问题如何将文本和图像拖放到画布上 火狐41 0 1 我根本不知道如何访问我放到画布上的图像的图像数据 我尝试过类似的事情data event dataTransfer getData image 但这一切都不起作用 functi
  • 如何制作编号段落(HTML5/CSS3)

    我正在编写 HTML5 中的 QuickBASIC 4 5 指南 并且我已经得到了很多工作 但我想知道如何对我的代码行进行编号 或停止文本换行 目前 我的代码如下所示 1 PRINT Hello World 2 INPUT Who are
  • RSelenium 无法打开浏览器

    我想使用 Selenium 从 R 进行网页抓取 我的Windows版本 Windows 11 21H2 我有最新的 Java 更新 1 8 0 351 评论它 因为我已经看到它可能是这种情况下的修复 但是 在定义驱动程序对象时 出现以下错
  • 如何退出 git log 或 git diff [重复]

    这个问题在这里已经有答案了 我正在尝试在以下的帮助下学习 Git沉浸式 Git 每当我使用时 有一件事让我感到沮丧git log or git diff 当我遇到这种情况时 我不知道下一步该怎么做 END word 我无法输入任何命令 最终
  • 将巨大图像(5mb)加载到 svg 背景中会导致像素化和性能问题

    我有一些问题像素化和表现SVG 背景图像与 D3 js 一起 您已经可以在这里看到一个正在运行的示例 http arda maps org ages first 请不要分享 直到它仍然是 Alpha 版本 谢谢 Example So let
  • 如何创建带有日期的图表工具提示(日期时间格式)

    我无法获得正确格式的提示 foreach RootObject o in myRootObjects seriesTemperatur Points AddXY DateTime Parse o datum o temp seriesPre
  • Perl 5.8.8 不支持 XML::LibXML 吗?

    我回答了一个question不久前我最初建议使用 XML DOM 后mirod建议我使用 XML LibXML 代替 我实现了它 说实话 它在我的系统上运行得很好 我发现新模块的运行时间大幅下降 而无需进行任何额外的优化 现在棘手的部分是
  • 在 Coq 中实现向量加法

    在某些依赖类型语言 例如 Idris 中实现向量加法相当简单 根据维基百科上的例子 import Data Vect default total pairAdd Num a gt Vect n a gt Vect n a gt Vect n
  • IE 必须关闭才能使事件与 jQuery 一起工作

    快速概述 函数 getbillno tbl 默认返回显示 1 ELSE echo 1 问题 在 IE 中 无论我显示什么 即使页面是空白 它也总是显示 1 我没有点击刷新 而是尝试关闭 IE 9 它确实显示了正确的值 我再次更改了代码中的值
  • 开源报告服务? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有没有免费的开源的报告服务我们可以将其部署在网络服务器中 并且不需要任何许可 实际上 我对整个框架 工具包 报告设计 查看和托管感兴趣 它应该能够从
  • 构建 OSX 应用程序包

    假设我在没有使用 Xcode 的情况下制作了一个 osX 应用程序 使用 GCC 编译后 我得到一个链接到其他几个库的可执行文件 其中一些库可能会再次动态链接到其他非标准系统库 是否有任何工具可以通过首先创建所需的目录结构 然后递归地复制
  • java ThreadPoolExecutor 中的workerCountOf()方法

    我试图理解 ThreadPoolExecutor 类 我发现该类中声明了一些最终变量 但无法理解它们的用途 private final AtomicInteger ctl new AtomicInteger ctlOf RUNNING 0
  • 如何在java中添加图像到表单

    我正在使用 JDeveloper 在 java 中设计一个表单 我是 JDeveloper 的新手 在 JDeveloper 工具中 我没有找到任何像 Net 那样直接将图像添加到表单的选项 而且我不知道如何手动添加图像到表单 有没有其他方
  • 无法连接到面向互联网的 NLB 将流量转发到私有实例

    我已经使用以下配置配置了云 VPC 在两个可用区中具有公有子网和私有子网 公有子网配置了 Internet 网关 私有子网配置了 NAT 网关 面向互联网的网络负载均衡器 允许在两个可用区域中配置 TCP 流量 用于转发来自负载均衡器的流量
  • 为什么我的 t-sql 左连接不起作用?

    你能运行这个并告诉我为什么结果集只有两行吗 它应该有三个 看起来像这样 appId stepId section start 101 1 Section 1 2016 01 03 00 00 00 000 101 2 Section 2 2