MySQL SQL语句之join过滤注意事项

对于SQL语句的JOIN语句,大家并不陌生。关于其中的where语句中进行内容过滤还是在 On 语句中或者having进行过滤,这个是值得注意的。

案例:找出某段时间内注册的新用户,没有通过新手任务当中具体哪一步任务,统计

其中涉及到两张表

用户基础表:user_base,  user_id, 注册时间 created_at

任务表: user_id,task_id,task_status

A 语句:

select  min(b.task_id) life,task_status,  a.user_id from user_tasks  b  join  (select user_id from  user_bases where created_at  between '   '  and  '   ' ) a  on a.user_id=b.user_id group by a.user_id having  b.task_status<3;

B语句:

select min(task_id),task_status,a.user_id from user_tasks b join  (select user_id from  user_bases where created_at between '  '  and  '  '  ) a  on a.user_id=b.user_id  and task_status<3 group by user_id;

A,B语句最大的差别是对 task_status<3 进行过滤的先后顺序。

A,语句中表内容进行链接匹配时,以user_id为准,找出每个用户的task_id,最后是 having  task_status<3 过滤

B,语句是表内容进行匹配时,task_status<3进行join并且按照group by  求出每个用户min  task_id.

所以B语句是符合标准的。

对于Join 进行链接时,要确定好以哪些字段进行过滤内容!

本文出自 “技术成就梦想” 博客,请务必保留此出处http://weipengfei.blog.51cto.com/1511707/1117069

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/

时间: 2024-10-03 06:03:08

MySQL SQL语句之join过滤注意事项的相关文章

MySQL sql语句 mybatis

问题描述 MySQL sql语句 mybatis mybatis sql 语句中将数据库中的字段当作参数传入,sql中成了 '字段名' = ? 就是字段名前后都会加上单引号, 请问有方法可以去除字段名前后的单引号吗? 解决方案 http://blog.csdn.net/binyao02123202/article/details/8594050 解决方案二: 在字段 加上 这个 <![CDATA[${字段}]]> = '某个值' 如果是你需要的请采纳 解决方案三: 0023-mybatis在m

oracle-oravcle sql语句转换为mysql sql语句

问题描述 oravcle sql语句转换为mysql sql语句 请问在oracle中的插入语句是insert into ACT_HI_ACTINST (ID_ PROC_DEF_ID_ START_TIME_)values ('2698' 'M0008C020:3:12504'to_timestamp('20-03-2015 14:31:17.274000');若换到mysql中那个to_timestamp()那段该怎么替换 解决方案 mysql的sql语句MySQL 常用SQL语句mysql

mysql:sql语句,想了半天没头绪,请教大家

问题描述 mysql:sql语句,想了半天没头绪,请教大家 收货人 收货地址 订单号 用户ID 张三 北京 1001 1 张四 上海 1002 2 张五 北京 1003 3 张六 广州 1004 4 张三 深圳 1005 5 张七 上海 1006 6 现在有这样的一个需求,每一行假定是一条订单记录,收货人和收货地址字段任意一项与其他订单一致,即认为是关联订单 如果关联订单大于3条,就把这条订单对应的用户ID记录下来.最终要的就是用户ID的列表. 比如:**订单号1001和订单号1005的收货人都

温习sql语句中JOIN的各种操作(SQL2005环境)

温习sql语句中JOIN的各种操作(SQL2005环境) 为了方便测试,先建二个基本表T_Employee(员工表),T_Region(地区表) Sql语句如下: CREATE TABLE [dbo].[T_Employee](  [ID] [int] NULL,  [Name] [nvarchar](50)  NULL,  [RegionID] [int] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[T_Region](  [ID] [int] NULL,

加速MySQL SQL语句优化的一些命令方法

引言 优化SQL,是DBA常见的工作之一.如何高效.快速地优化一条语句,是每个DBA经常要面对的一个问题.在日常的优化工作中,我发现有很多操作是在优化过程中必不可少的步骤.然而这些步骤重复性的执行,又会耗费DBA很多精力.于是萌发了自己编写小工具,提高优化效率的想法. 那选择何种语言来开发工具呢? 对于一名DBA来说,掌握一门语言配合自己的工作是非常必要的.相对于shell的简单.perl的飘逸,Python是一种严谨的高级语言.其具备上手快.语法简单.扩展丰富.跨平台等多种优点.很多人把它称为

如何用一款小工具大大加速MySQL SQL语句优化(附源码)

作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构.设计.开发经验.著有<SQL优化最佳实践>一书.   引言   优化SQL,是DBA常见的工作之一.如何高效.快速地优化一条语句,是每个DBA经常要面对的一个问题.在日常的优化工作中,我发现有很多操作是在优化过程中必不可少的步骤.然而这些步骤重复性的执行,又会耗费DBA很多精力.于是萌发了自己编写小工具,提高优化效率的想法.   那

SQL语句Left join 中On和Where的用法区别

原文地址:点击打开链接 SQL语句如下: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff' WHERE 表1.NAME != 'aa'        步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2) 步骤2:应用ON筛选器(当前的条件为  表1.id = 表2.id AND 表2.Name != 'ff') 步骤3:添加外部行 这一步只对OUTER JOIN起作用,如果是LEF

利用tcpdump抓取mysql sql语句

这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入. 脚本不是很长,但是效果很好. #!/bin/bash #this script used montor mysql network traffic.echo sql tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/; i

LINQ体验(6)——LINQ to SQL语句之Join和Order By

Join操作 适用场景:在我们表关系中有一对一关系,一对多关系,多对多 关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明: 在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和 GroupJoin(分组Join查询). 该扩展方法对两个序列中键匹配的元素进行 inner join操作 SelectMany 说明:我们在写查询语句时,如果被翻译 成SelectMany需要满足2个条件.1:查询语句中没有join和into,2:必须出现