`

lefj join时候 where 的注意点

 
阅读更多
select count(*) from t_skill_cat s left join t_person_skill_score score on s.id = score.skill_Id  and score.user_Id = 'yh@qq.com'

 

VS

 

select count(*) from t_skill_cat s left join t_person_skill_score score on s.id = score.skill_Id  where  score.user_Id = 'yh@qq.com'

 

 

 

这两处区别在于最后一个and 和 where 。会导致的结果,where 可能结果为0, and则是正确的。原因就是where是对结果集做最后的过滤,and则是在内部过滤。这里正确的逻辑显然是在内部过滤,应该用and。

0
0
分享到:
评论

相关推荐

    left_join_on_and与left_join_on_where的区别

    left_join_on_and与left_join_on_where的区别

    sql语句join中on和where的区别

    ### SQL语句JOIN中ON和WHERE的区别 #### 引言 在SQL中,JOIN操作用于合并两个或多个表中的行。正确理解`ON`和`WHERE`子句的区别对于高效地编写查询至关重要。本文将详细解释这两者的不同,并通过具体的例子来加深...

    SQL _join on 和where的执行顺序1

    对于LEFT JOIN,WHERE条件的过滤发生在最后,不满足条件的记录会被删除,但对于INNER JOIN,ON和WHERE的效果相同,因为它们都只会保留匹配的记录。 举例说明,假设我们有两个表: 表1(tab1): | tab1.id | tab1....

    深入Oracle的left join中on和where的区别详解

    值得注意的是,INNER JOIN没有LEFT JOIN这样的特性。对于INNER JOIN,无论条件放在ON还是WHERE中,结果都是相同的,因为它只返回那些在两个表中都有匹配记录的行。 总的来说,ON子句在LEFT JOIN中控制关联条件,...

    left join 过滤条件写在on后面和写在where 后面的区别

    ### left join 过滤条件写在on后面和写在where 后面的区别 在SQL查询语句中,连接(JOIN)是一种非常重要的操作,用于从两个或多个表中获取数据。其中,`LEFT JOIN`是一种常用的连接类型,它返回左表的所有记录以及...

    sql中的left join及on、where条件关键字的区别详解

    请注意,即使在`score`表中没有与特定`class_id`匹配的`stu_id`,`LEFT JOIN`也会返回左表(`class`表)的所有行,但只显示`stu_id`为'A001'的`score`记录。 如果我们仅使用`WHERE`子句而不进行JOIN,那么只会返回...

    SQL语句left join/right join/inner join 的用法比较

    在SQL查询中,JOIN操作是连接两个或多个表的关键部分,用于从这些表中提取相关数据。本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN...

    解析mysql left( right ) join使用on与where筛选的差异

    需要注意的是,WHERE子句在处理的过程中,并没有使用到之前ON子句的连接条件。因此,使用WHERE子句可能会导致得到与在ON子句中直接指定连接条件不同的结果集。 根据这两个不同的查询语句的使用方式,我们可以得出...

    SQL中的left outer join,inner join,right outer join用法详解

    SELECT * FROM t_institution i RIGHT OUTER JOIN t_teller t ON i.inst_no = t.inst_no WHERE i.inst_no = "5801" 全外连接(Full Outer Join) 全外连接是将左、右两个表的全部行连接起来,例如: SELECT * ...

    join on 语句及扩展

    这里我们将深入探讨几种JOIN类型及其使用,以及ON和WHERE子句的区别。 1. INNER JOIN: INNER JOIN返回两个表中匹配的记录。这意味着如果某个记录在其中一个表中没有对应的匹配项,那么这个记录就不会出现在结果集中...

    SQLServerUpdate多表Join

    ### SQL Server Update 多表 Join 知识点详解 在 SQL Server 中,有时我们需要更新多个表中的数据,尤其是在这些表之间存在某种关联的情况下。本文将详细介绍如何使用 `UPDATE` 语句结合 `JOIN` 来实现对多个表的...

    mysql Join使用以及优化

    在实际应用中,还需要注意其他几种优化Join的策略,如: 1. 避免在where条件中使用函数或者表达式,这会阻止MySQL利用索引。 2. 确保Join操作中的连接字段有相同类型的数据。 3. 使用EXPLAIN语句来查看查询的执行...

    解析sql语句中left_join、inner_join中的on与where的区别

    这意味着在LEFT JOIN中,WHERE子句的条件会减少最终结果中的行数,而在INNER JOIN中,WHERE子句的条件与ON子句的效果相同,因为它们都在连接时应用。 在性能方面,虽然SQL语句6和7的逻辑效果相同,但它们的执行计划...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    inner join 还有一种写法,即使用逗号分隔两个表名,然后在 WHERE 子句中指定连接条件。例如: SELECT * FROM `xs`, `cj` WHERE xs.id = cj.id 这两种写法是等价的,都是等值连接。 inner join 的应用 inner ...

    Linq to datable(Left join right join full join)实例

    在LINQ中,这可以通过`GroupJoin`和`SelectMany`方法实现,或者使用`From…Join…Where…DefaultIfEmpty…Select`结构。 示例: ```vbnet Dim query = From l In leftTable _ Join r In rightTable On l.Key ...

    Left join优化规则的研究

    当 Left Join 可以被转化为 Inner Join 时,通常是因为在 WHERE 子句中存在关于右表的非 NULL 条件。这允许数据库跳过对左表中无匹配项的记录,从而提高查询速度。 2.1 条件转化 对于以下 Left Join 查询: ```sql ...

    MySQL left join操作中on和where放置条件的区别介绍

    如果`WHERE` 子句包含的条件与`LEFT JOIN`的连接条件相同,但放在`WHERE`里,那么这个条件将在临时表生成后才被检查,这可能导致左表的某些行因不满足`WHERE`条件而被过滤掉,失去了`LEFT JOIN`应有的效果。...

    Mycat跨分片Join指南

    select a.*,b.id, b.name as name from orders a join customer b where a.customer_id=b.id; /*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.* from orders a join customer b where a.customer_id=b....

Global site tag (gtag.js) - Google Analytics