gpt4 book ai didi

左连接前的 SQL 过滤 LEFT TABLE

转载 作者:行者123 更新时间:2023-12-01 09:48:51 25 4
gpt4 key购买 nike

我已经阅读了许多来自 SO 的帖子,我了解 where 子句和 on 子句中过滤之间的区别。但是这些示例中的大多数都在 RIGHT 表上进行过滤(使用左连接时)。如果我有如下查询:

select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20

返回值不是我所期望的。我会认为它首先过滤左表并仅获取 ID = 20 的行,然后与 tableB 进行左连接。

当然,这在技术上应该和做一样:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20

但是我认为如果您可以在进行连接之前过滤表,性能会更好。有人可以启发我了解如何处理此 SQL 并帮助我彻底理解这一点。

最佳答案

一个 left join遵循一个简单的规则。它保留第一个表中的所有行。列的值取决于 on条款。如果没有匹配,则对应表的列是NULL -- 无论是第一张 table 还是第二张 table 。

所以,对于这个查询:

select *
from tableA A left join
tableB B
on A.ID = B.ID and A.ID = 20;
A 中的所有行无论是否匹配,都在结果集中。当 id 不是 20 时,行和列仍然取自 A .但是,条件为假,所以 B 中的列是 NULL .这是一个简单的规则。它不取决于条件是在第一个表还是第二个表上。

对于此查询:
select *
from tableA A left join
tableB B
on A.ID = B.ID
where A.ID = 20;
from子句保留 A 中的所有行.但随后 where条款有其效力。它过滤行,因此结果集中只有 id 20s。

使用 left join 时:
  • 第一个表上的过滤条件进入 where条款。
  • 后续表的过滤条件进入 on条款。
  • 关于左连接前的 SQL 过滤 LEFT TABLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42288760/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com