SQL 连接具有特定条件的两个表

2024-04-15

表A结构:

表B结构:

上面是两个表,TableB.TableARelationID是一个relationID,用于映射表A。

期望的输出:

期望的结果将采用 TableA.RecordID 和 TableB.Text,但仅采用表 B 中的类型 2,即忽略类型 1

下面是我使用的 SQL 查询:

SELECT tablea.recordid, 
       tableb.text 
FROM   tablea 
       LEFT JOIN tableb 
              ON tablea.relationid = tableb.tablearelationid 
WHERE  type = 2 

但上面的查询会输出:

即 RecordID 1 丢失,因为“where”子句被过滤。

那么如何显示表 A 中的 RecordID 1 呢?


您需要移动type = 2过滤到连接条件:

SELECT  TableA.RecordID, TableB.Text 
FROM    TableA 
        LEFT JOIN TableB 
            ON TableA.RelationID = TableB.TableARelationID 
            AND TableB.Type = 2;

考虑这样的结果:

SELECT  TableA.RecordID, TableB.Text, TableB.Type
FROM    TableA 
        LEFT JOIN TableB 
            ON TableA.RelationID = TableB.TableARelationID;

你会得到

RecordID | Text | Type
  1      | NULL | NULL
  2      |   B  |  2
  3      |   C  |  2
  4      |   D  |  2

然后您要过滤类型列,因此对于 recordID = 1 您有NULL = 2这是假的(它实际上不是假的,它是空的,但它不是真的),所以这条记录从最终结果中被剔除。

每当您离开联接时,您都必须在联接条件而不是位置中应用您希望应用于左表的任何过滤条件,否则您实际上将其转换为内部联接。

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

SQL 连接具有特定条件的两个表 的相关文章

  • 为什么此 SQL 更新失败(“列名无效”)?

    我有一个 SQL Server CE 表 如下所示 我正在尝试像这样更新其唯一记录 update workTables set fileType INV 但我得到 Why UPDATE 请查看相关问题here https stackover
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • ClassCastException:java.util.Date 无法转换为 java.sql.Date

    你好 我的代码抛出了ClassCastException StackTrace 显示 java lang ClassCastException java util Date cannot be cast to java sql Date a
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 模式更新后 jOOQ 生成的类的运行时验证?

    我用org jooq util DefaultGenerator在构建过程中生成 jOOQ 类来表示我的数据库模式 当应用程序运行时 架构预计会在应用程序不知情的情况下发生更改 此类更改可能与已生成的代码兼容 也可能不兼容 如何在运行时检测
  • TOAD 将 &String 视为绑定变量

    我正在使用 Oracle Data Integrator 开发一些 ETL 有时会使用 TOAD 测试部分代码 今天我遇到了 TOAD 的问题 我有一行像 AND column value like DEV PROD 当我尝试运行包含上面过
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 插入触发器最终在分区表中插入重复行

    我有一个分区表 我认为 适当的INSERT触发器和一些限制 不知何故 INSERT语句为每个语句插入 2 行INSERT 一个用于父分区 一个用于相应的分区 设置简要如下 CREATE TABLE foo id SERIAL NOT NUL
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int

随机推荐

  • (Fortify) 类别:Android 不良做法:缺少 Google Play 服务更新的安全提供程序(1 期)

    我们正在使用 Fortify 扫描我的 Android 源代码 但我无法摆脱这个问题 类别 Android 不良做法 缺少 Google Play 服务更新的安全提供程序 1 期 Fortify指向这行代码 工具 替换 android al
  • Numpy 沿特定维度选择不替换

    在不进行替换的情况下 我根据指定的分布从样本中 n 次不同地选择 k 个元素 迭代解决方案很简单 for in range n np random choice a size k replace False p p 我无法设置size k
  • Java:如何通过忽略“\n”来逐行读取文件

    我正在尝试读取每行制表符分隔的文本文件行 行通过使用回车符 r n 进行分隔 并且在制表符分隔的文本字段中允许使用换行符 n 由于我想每行读取文件行 因此我希望我的程序忽略独立的 n 很遗憾 BufferedReader使用这两种可能性来分
  • std::this_thread::yield 与 Linux 上的 sched_yield 有什么不同吗?

    我只是想知道如何std this thread yield是在linux上实现的 它与sched yield 我见过一些自旋锁的实现 这意味着std this thread yield是更轻量级的东西sched yield就线程放弃进程多长
  • OSGi 应用程序修补策略

    修补 OSGi 容器的适当机制是什么 1 Should the bundles binaries jars have the same name as the old ones then a Replace the bundle with
  • 使用多线程的 JPA 中的事务

    我的目标是使用单元测试在我的应用程序中引发乐观锁定异常 我已经在理论上了解了如何做到这一点 但我在实践中的问题是如何维护两个线程之间的事务 所以 这就是我到目前为止所做的 我正在使用 JUnit 测试 RunWith SpringJUnit
  • 用于进行修改的 git 工作流程,您永远不会将其推回原点

    我正在构建一个 iPhone 应用程序PhoneGap http phonegap com 其中有一个 Git 存储库 我想在我自己的 Git 存储库中跟踪对 PhoneGap 代码的更改 主要是向 www 目录添加文件 同时能够从 Pho
  • GitHub、Gerrit、Hudson(Jenkins) 工作流程

    我刚刚开始一起使用 GitHub Gerrit 和 Hudson Jenkins 我需要一些关于工作流程的想法 我们想使用 GitHub 作为我们的主要远程存储库 我们希望主要使用 Gerrit 进行代码审查 但也用于 Hudson 中的构
  • 如何运行 Webpack 开发服务器 --https --hot --inline

    使用 CLI 配置时 有没有办法在 https 上运行 webpack dev server 问题是连接到socket io结束了http并不是https 存在解决方法 但非常烦人 手动包含https webpack dev server在
  • Scala - 以函数方式修改字符串

    我刚刚开始使用 Scala 因此开始以更实用的方式做事 只是想知道是否有一种更实用的方法来实现如下所示的功能 def expand exp String String var result exp for k v lt libMap res
  • Python/Django 中的音频波形可视化

    我已经在 Stack Overflow 上寻找这个问题的答案 但似乎没有地方给出正确的答案或方向 我的项目将允许用户上传 WAV 最终将在服务器上使用 FFmpeg 将其转换为低质量 MP3 并将全部存储在 Amazon S3 上并提供服务
  • asp.net mvc - ActionLink 的渲染不一致

    我有一个控制器 它接受以下两种格式的 URL 网络 添加或编辑 gt 在页面上呈现空白表单以添加新的网络对象 网络 AddOrEdit id gt 使用预填充表单呈现页面以编辑网络对象 带有 ID id 显然 每个实例中都使用相同的视图 我
  • 在 JavaScript 中逐行动态添加字幕到视频元素

    我想知道目前是否可行 下面是我的 HTML
  • Chrome DevTools 中缺少“添加到主屏幕”链接

    使用 Google 服务可能会令人沮丧 他们有令人难以置信的文档 但文档总是假设一切正常 如果有什么东西不像广告上说的那样有效 那你就完全靠自己了 没有错误消息 没有解决问题的帮助 甚至没有承认某些事情可能不起作用 以防万一 添加到主屏幕
  • 如何检索 C99 可变参数宏的最后一个参数?

    Visual Studio 失败的 static assert 错误消息完全由错误代码和 static assert 的第二个参数组成 没有任何其他消息表明这是静态断言失败 我想做一个宏来解决这个问题 例如 作为第一次尝试 define S
  • Winforms MVP

    我主要有 ASP Net 背景 懂一些 MVC 我也做了一些 Silverlight 和 MVVM 但是我现在即将转向 Winforms 我对它的经验很少 所以我想知道如何处理 MVP 典型的 MVP 示例显示演示者设置视图属性 通过某种
  • 如何从表中选择除最后 100 条之外的所有记录

    我有一个存储客户记录的数据库 我想设置一个 cron 作业来定期覆盖这些记录 我想说 Select from ORDERS where ORDER ID 不在列表的前 100 名中 每行都有自己的 order id 最新的 order id
  • 多个App服务使用同一个域名

    我们有一个场景 我们有多个 azure 应用程序服务 并且部署了 Web API 但是我们需要所有应用程序服务使用相同的域名 而不是子域 例如http example com api1 http example com api1在一个应用程
  • Postgres:在一项选择中获取最小值、最大值、聚合值

    我正在使用 Postgresql 8 4 我有一个这样的表 type value 1 5 2 6 1 4 3 10 我想写一个选择 它将给我最小值和最大值 以及所有类型的聚合integer 期望的结果应该是 min max types 4
  • SQL 连接具有特定条件的两个表

    表A结构 表B结构 上面是两个表 TableB TableARelationID是一个relationID 用于映射表A 期望的输出 期望的结果将采用 TableA RecordID 和 TableB Text 但仅采用表 B 中的类型 2