精华内容
下载资源
问答
  • inner join,left join,right,join 三种表连接的方式区别自行查找,或者可以参考链接:...`select * from product a left join product_detail b on a.id = b.id and b.weight !=

    inner join,left join,right,join 三种表连接的方式区别自行查找,或者可以参考链接:https://www.cnblogs.com/FENGXUUEILIN/p/10039699.html

    最近在完成一个查询时,遇到这个问题,记录一下。
    两张测试表:
    product表
    在这里插入图片描述
    product_detail表
    在这里插入图片描述
    sql1:

    `select * from product a left join product_detail b on a.id = b.id and b.weight != 44 and b.exist = 0;`
    

    结果1:
    在这里插入图片描述
    sql2:

    select * from product a left join product_detail b on a.id = b.id where  b.weight != 44 and b.exist = 0;
    

    结果2:
    在这里插入图片描述
    on 条件 用来决定如何从子表(这里的子表是b)中检索数据行。
    如果子表中没有任何一行数据匹配 on 的条件,将会额外生成一行所有列为 NULL 的数据。
    如果字表中有匹配on的条件,但是被on后面的and条件过滤,此时这一行还是为null,就如sql1中and把b表中id为4的过滤掉。

    在匹配阶段 where子句的条件都不会被使用。仅在匹配阶段完成以后,wehre子句条件才会被使用。它将从匹配阶段产生的数据中检索过滤。如sql2。

    展开全文
  • left join on后面条件失效

    千次阅读 2017-08-28 11:00:45
    mysql left join on后面条件失效和解决方案

    注意:1. 如果存在 表A left join  表 B ,将表a的过滤条件放到on后面,条件是失效的,因为表A在left 中是将a表的记录全部查询出的,如果要限制a的记录数放到where后面

            2. 对于inner join,满足on后面的条件表的数据才能查出,可以起到过滤作用。也可以把条件放到where后面。

    对于on和where  区别在于,on是关联的同时进行条件记录的过滤,where则是关联查询后再进行过滤

    关于left join ,right join ,full join 的说明:

    left join,right join,full join的特殊性,对于left join,right join不管on上的条件是否为真都会返回left或right表中的记录,此时a表记录由于是左连接,全部查询出来,对应的b表,不存在对应的记录则会补null,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的


    对于JOIN参与的表的关联操作,如果需要不满足连接条件的行也在我们的查询范围内的话,我们就必需把连接条件放在ON后面,而不能放在WHERE后面,如果我们把连接条件放在了WHERE后面,那么所有的LEFT,RIGHT,等这些操作将不起任何作用,这种情况坐标或者右表的记录就不会全部显示,而是会显示出过滤后的记录,,对于这种情况,它的效果就完全等同于INNER连接。对于那些不影响选择行的条件,放在ON或者WHERE后面就可以

    展开全文
  • (1):ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】。 (2):对于主表的筛选条件应放在where后面,不应该放在ON后面 (3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件 ...
    mysql中,运算符是有优先级的.举个例子
    create table A(id int);
    INSERT INTO A VALUES(1);
    INSERT INTO A VALUES(2);
    INSERT INTO A VALUES(3);
    create table B(id int);
    INSERT INTO B VALUES(1);
    INSERT INTO B VALUES(2);
    INSERT INTO B VALUES(3);

    这里有两个sql分别是:
    SELECT a.*,b.* FROM A a LEFT JOIN B b ON a.id = b.id AND a.id = 2;
    SELECT a.*,b.* FROM A a LEFT JOIN B b ON a.id = b.id WHERE a.id = 2;
    接下来大家猜猜结果是什么?
    思考ing....
    公布答案
    第一条sql

    第二条sql

    是不是很出乎大家的意料(反正我是很出乎意料)
    这里就涉及到mysql中运算符优先级的问题,在彻底理清原因之前我们再来看一个sql
    SELECT a.*,b.* from A a left join B b ON a.id = b.id or a.id = 2;
    这个大家再思考下,结果是什么?
    思考ing......
    公布答案

    大家可能看出一些规律,在on的情况下and和or与on同时对前面的集合起作用,而存在where的时候,先对集合进行on条件的抽取,在根据where的条件进行抽取.这是个值得注意的地方.
    说下原因:
    (1):ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】。
    (2):对于主表的筛选条件应放在where后面,不应该放在ON后面
    (3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件
    放置于ON后。如果是想再连接完毕后才筛选就应把条件放置于where后面
    (4):对于关联表我们其实可以先做子查询再做join
    来自:http://www.cnblogs.com/ysdxz207/p/5038526.html
    展开全文
  • 1.应用场景 有时,业务逻辑,两个... on 后面就是两个条件,另外on后面不一定是 ‘=’,也可以试其他逻辑关系 2.核心点 join 后面是可以跟多个条件 【之间是并列关系,而且不一定等号,只要是条...

    1.应用场景

    有时,业务逻辑,两个实体之间是一对多关系,但是都存在多个版本,需要两个实体版本对应起来,就需要添加一个约束条件【也可以理解为: 将多对多关系,添加一个条件约束,变为一对多关系

    on 后面就是两个条件,另外on后面不一定是 ‘=’,也可以试其他逻辑关系

     

    2.核心点

     join 后面是可以跟多个条件 【之间是并列关系,而且不一定等号,只要是条件即可】 【TBD】

    3.参考:

    https://www.cnblogs.com/leochenliang/p/7364665.html  //left join on and 与 left join on where的区别

    https://www.cnblogs.com/caoyajun33-blog/p/6814185.html  

    https://blog.csdn.net/minixuezhen/article/details/79763263  //SQL语法——left join on 多条件

     

    后续补充...

    展开全文
  • 这里主要针对left join 后面on和接where的区别(踩坑)
  • MySQL中left join on后面的条件与where后面的条件的区别

    万次阅读 多人点赞 2018-03-29 12:53:41
    表:A、B A 字段:id,name B 字段:id,a_id ...A left join B on A.id=B.a_id and B.id=1 结论: 表 A 和表 B 的连接依靠关联条件 主表的筛选条件,应该放置在 where 条件后 on ...
  • left join onand 和where 的区别

    千次阅读 2019-01-14 14:54:10
    SELECT * FROM student a LEFT JOIN sc b ON a.Sid = b.Sid AND a.Sname="...on用and连接,‘a.Sid = b.Sid AND a.Sname="赵雷"’都作为on条件)  SELECT * FROM student a LEFT JO...
  • 相信很多朋友在写sql的时候会用到 left join on,right join on, inner join on 这种连接方式,但是如果想在我们连接的表中去过滤某个条件该怎么做呢,是直接在 on 后面and 还是直接在where中加条件呢?...
  • Left join后用and和where的区别

    千次阅读 2018-12-18 22:03:06
    on用and连接,都作为on条件。 onwhere连接,where作为筛选条件,则是匹配两个条件相同的结果集。onwhere连接,where作为筛选条件,则是匹配两个条件相同的结果集。 如下图一,on后的and使用错误导致两个...
  • left/right/inner/all join以及 on后面的查询条件1.on后面没有多余查询条件2.匹配条件放在(left join) on 和where后面的区别 1.on后面没有多余查询条件 当查询a表b表是,on后面只有一个连接条件:a.feild=b.field ...
  • MYSQL 中 LEFT JOIN ON 后的AND 和WHERE

    千次阅读 2018-05-24 10:59:20
    表1 app_notification_user,里面有两条数据:表2 app_notification, 里面有一条数据语句1:SELECT anu.id,anu.app_notification_id,anu.`status`,an.*  ...LEFT JOIN app_notification an ON anu.app_not...
  • left join onand 和 where 的区别

    万次阅读 2018-09-28 17:02:03
    on的优先级是高于where的。 首先明确两个概念: LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 数据库在通过连接两张或多张表来返回记录时,都会生成...
  • 一般情况下,SQL语句的执行顺序如下所示: (1)from (2)on (3)join (4)where ...从SQL语句执行顺序的这个角度,我们可以很好的理解left join on and的用法。 以SQL Server为例,先创建两个测...
  • msyql left join on 后面多个条件

    万次阅读 多人点赞 2014-01-22 11:30:08
    即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学会点东西! ON 子句与 WHERE 子句的不同一种更好地理解带有 WHERE ......关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒
  • select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')  1、中间表  on条件:  tab1.size = tab2.size and tab2.name='AAA'  (条件不为真也会返回左表中的记录)  tab1.id ...
  • www.MyException.Cn 发布于:2012-05-16 23:40:10 ... 0 关于在join中的on后面用where和and的问题 SQL code select bl.LogMessage,bl.SystemDate,ncus.[user_name],bf.IsDelisting,bf.PName from B_PrjBaseInfo
  • oracle left join 查询on中出现and条件

    千次阅读 2017-01-22 19:16:01
    在使用LEFT JOIN时,右表的限制条件,在ON和WHERE字句中出现,逻辑上的语义完全不同。 过滤条件在ON子句中出现时,不会改变原来LEFT JOIN的执行语义:以左表为基表。 过滤条件在WHERE字句中出现时,已经改变了原来...
  • tab1 id size 1 10 2 20 3 30 ...下列语句 ON 后面的条件 如何执行的?...select * from tab1 left join tab2 on(1 = 1) ...select * from tab1 left join tab2 on(tab1.SIZE = tab2.SIZE AND tab2.NAME='AAA')

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,632
精华内容 34,252
关键字:

lefton后面用and