left join中 限制条件在on和where区别

2023-05-16

在多张表连接时,都会生成一张中间表,然后再将这张临时表返回给用户。
       在用left join中,on和where条件的区别如下:
       (1)on条件是在生成中间表时使用的条件,它不管on中的条件是否为真,都会返回左表中的记录,右表中的记录如果不符合on条件,则显示为空。
       (2)where条件是在中间表生成好之后,再对这张表进行过滤。这时已经和left join没有关系,不符合where条件的就会被过滤掉。

例子:

表balevent:账户余额表

    month:月份

    ACCOUNT:账户

目标:查询201906月有发生余额变动的账号,并且在201907月没发生余额变动的账号

语句一:正确的写法

select a.ACCOUNT from balevent a left join  balevent b 
    on a.ACCOUNT=b.ACCOUNT and b.MONTH='201907' 
where a.MONTH='201906' and b.ACCOUNT is null ; 

 

语句二:错误的写法,查询不出来结果

select a.ACCOUNT  from balevent a left join  balevent b 
    on a.ACCOUNT=b.ACCOUNT 
where a.MONTH='201906' and b.MONTH='201907' and b.ACCOUNT is null ; 

注:

  如果是用in和not in语句:

select * from balevent a where account not in (select account from balevent b where b.MONTH='201906')  and A.MONTH='201907';

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

left join中 限制条件在on和where区别 的相关文章

  • 如何在mysql中左连接多个一对多表?

    我在连接 mysql 中的三个表时遇到问题 假设我们有一个名为posts我将我的条目保存在其中 我有一个名为likes我将 user id 和 post id 存储在其中 第三个表名为comments我在其中存储 user id 和 pos
  • 无法使用连接编译 C# linq 查询

    下面是一些我在执行一些 linq 连接时无法编译的 C 代码的简化示例 有谁知道为什么这不能编译 错误是 无法从查询中推断出类型参数 在我的真实代码中Fetch 返回一个IQueryable
  • 使用连接表进行过滤

    我试图提高一些查询性能 但生成的查询看起来并不像我期望的那样 使用以下方式检索结果 query session query SomeModel options joinedload all foo bar options joinedloa
  • 为什么我不能分配给 Pandas DataFrame 的一部分?

    我很困惑为什么以下pandas未成功将 A 列的最后两个值分配给 B 列的前两个条目 df pd DataFrame A 1 2 3 4 5 6 7 B 10 20 30 40 50 60 70 df df join pd DataFram
  • DataTable Linq 连接许多列

    我在使用 Linq Join 时遇到问题 我想连接 2 个表 它们具有相同的 n 列结构 我的问题是我不知道这些列的名称 那么我如何在 select new 中重写这些列 表 1 这里我有一些 ID Name 和 LastName 参数 注
  • 使用 For 循环在 Oracle 过程中检索多行

    我正在处理存储过程 我需要检索一组结果并单独处理每个元素 然后返回整个结果 使用 3 个不同的表 我对数据库不太熟悉 但这就是我能想到的 create or replace procedure GET EMP RSLT IS CURSOR
  • 优化器如何决定合并连接和散列连接?

    数据库系统概念介绍了实现连接操作的几种方法 其中两个是合并连接和散列连接 我想知道优化器何时决定使用合并连接并且 什么时候进行哈希连接 特别是 从https stackoverflow com a 1114288 156458 https
  • Pandas:如何将多索引数据帧与单个索引数据帧连接起来,以及自定义排序

    我有一个 MultiIndex pandas DataFramedf multi like import pandas as pd df multi pd DataFrame A A1 0 234 2002 A A1 1 324 2550
  • 使用 python 连接字节列表

    我正在尝试开发一个工具来读取二进制文件 进行一些更改并保存它 我想做的是列出文件中的每一行 处理几行 然后再次加入该列表 这是我尝试过的 file open myFile exe r b aList for line in f aList
  • 区分大小写的连接 SQL

    我在这里有点停滞不前 我有一个简单的左外连接到一个返回 ID 的表 我的代码是 Select distinct TenantID Name Name2 TenantNumber Cashname From Tenants LEFT OUTE
  • Rails 中两个表充当一个模型

    Rails 是否可以在依赖于两个表的联接的模型上进行设置 这意味着要找到 更新 销毁模型记录 需要将两个数据库表中的两条记录通过联接链接在一起 该模型只是将两个表的所有列包装在一起 然后可用于表单等 这样 当模型被创建 更新时 它只是一种应
  • Oracle JOIN USING + 子查询:ora-00904 字符串:无效标识符

    我的查询中有一点语法问题 简化 select from table1 t1 inner join table2 t2 using pk1 inner join table3 t3 using pk2 where not exists sel
  • SQL 查询 - 返回连接表的前两条记录的连接

    我有两张桌子 Patient pk患者ID 名 Surname 患者状态 pkPatientStatusId fk患者 ID 状态码 开始日期 EndDate Patient gt 患者状态是一对多的关系 我想知道是否可以在 SQL 中进行
  • T-SQL 选择条件连接

    假设我有 3 张桌子 Cars Id 汽车颜色历史 Id CarID ColorID 修改日期 Color Id 颜色名称 我想选择所有汽车及其颜色 但重要的是 汽车的颜色是最后修改的颜色CarColorHistory table 我需要使
  • 使用 MySQL 通过 JOIN 获取 GROUP BY 中的 SUM

    我在 MySQL 5 1 38 中有两个表 products id name price department 1 Fire Truck 15 00 Toys 2 Bike 75 00 Toys 3 T Shirt 18 00 Clothe
  • 带 Join 的 TSQL Update 语句

    我有两个具有父 子关系的表 我想用孩子的数据更新父母 但是 假设有 2 个孩子 我希望能够根据孩子的其他列来选择哪个孩子用于更新 这是我到目前为止所拥有的 父级 test 孩子 exdat 预期结果 更新后父级的结果应仅包含大写字母 我想用
  • 如何在 Elasticsearch 中或在 Lucene 级别进行联接

    在 Elasticsearch 中执行相当于 SQL 连接的最佳方法是什么 我有一个包含两个大表的 SQL 设置 Persons 和 Items 一个人可以拥有many项目 人员和项目行都可以更改 即更新 我必须运行根据人和物品的各个方面进
  • Python Pandas Concat“WHERE”满足条件

    如何 连接 许多 Python Pandas 数据帧中的特定列 其中许多数据帧中每个数据帧中的另一列满足特定条件 此处通俗地称为条件 X 在 SQL 中 使用 JOIN 子句和 WHERE df2 Col2 X 和 df3 Col2 X 和
  • 在 Unix 上连接文本文件中的多个字段

    我该怎么做 File1看起来像这样 foo 1 scaf 3 bar 2 scaf 3 3 File2看起来像这样 foo 1 scaf 4 5 foo 1 boo 2 3 bar 2 scaf 1 00 我想做的是找到同时出现的线条Fil
  • 哪个更好/更快:连接许多表或选择一张大表

    我们正在使用 Oracle 11 这是我们用 Java 编写的应用程序 每天一次 通常是下午 我们的数据库由于许多大的 SQL 查询而冻结 我想以某种方式优化这个查询 该查询由不同表的许多联接组成 我的问题是 使用左连接对性能更好 还是将所

随机推荐