开发写了几个语句,觉得查询结果跟逻辑有点不相符,就拿到这里一起分析了下。

语句如下:

select tp.title, tp.amount,

ifnull(sum(case when tu.type = 1 then ti.invest_amount else 0 end),0) as aInvestAmount,

ifnull(sum(case when tu.type = 2 then ti.invest_amount else 0 end),0) as bInvestAmount,

ifnull(sum(case when tu.type = 3 then ti.invest_amount else 0 end),0) as cInvestAmount

from t_invest ti join t_user tu on ti.user_id = tu.id join t_project tp on ti.project_id = tp.id

where tp.id = '';

其中t_project 中有id:48346631623950333337353439383060,但在t_invest中是没有此project_id的。所以这条语句理论上应该是没有任何输出,但实际上却输出了如下结果:

为了方便说明此问题,我们来建立如下的表格及数据。

mysql> select * from t1;

+----+-------+

| id | name  |

+----+-------+

|  3 | chen  |

|  1 | zhang |

+----+-------+

2 rows in set (0.00 sec)

mysql> select * from t2;

+------+--------+

| id   | course |

+------+--------+

|    2 | math   |

+------+--------+

1 row in set (0.00 sec)

然后执行如下语句1:

mysql> select  t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id=1 ;

+----+-------+------+--------+------------+

| id | name  | id   | course | sum(t1.id) |

+----+-------+------+--------+------------+

|  1 | zhang | NULL | NULL   |       NULL |

+----+-------+------+--------+------------+

1 row in set (0.00 sec)

发现竟然有输出,再执行如下的语句2:

mysql> select  t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id in(1,null) ;

+----+------+------+--------+------------+

| id | name | id   | course | sum(t1.id) |

+----+------+------+--------+------------+

| NULL | NULL | NULL | NULL   |       NULL |

+----+------+------+--------+------------+

1 row in set (0.00 sec)

发现全部为null。

执行如下语句3,返回Empty set。

mysql> select  t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id=1 group by t1.id;

Empty set (0.00 sec)

mysql中的语法并不是特别的严格,语句1与语句2其实在oracle中是会报语法检查不通过的。会报:ORA-00937: 不是单组分组函数

一般情况下用到聚合函数一般得加上group by会比较严格些,而出来这样的状况只有在有join的时候出来,单表查询还是没问题的,联合表查询聚合函数有使用的话推荐用语句3的写法。

mysql线上一些隐患查询sql的更多相关文章

  1. mysql 线上not in查询中的一个坑

    今天早上开发又过来说,怎么有个语句一直没有查询出结果,数据是有的呀,并发来了如下的sql(为了方法说明,表名及查询均做了修改): select * from t2 where t2.course no ...

  2. 【MySQL 线上 BUG 分析】之 多表同字段异常:Column ‘xxx’ in field list is ambiguous

    一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这 ...

  3. MySql 学习之 一条查询sql的执行过程

    相信大家都接触过Mysql数据库,而且也肯定都会写sql.我不知道大家有没有这样的感受,反正我是有过这样的想法.就是当我把一条sql语句写完了,并且执行完得到想要的结果.这时我就在想为什么我写这样的一 ...

  4. MySQL - 常用命令及常用查询SQL

    常用查询SQL #查看临时目录 SHOW VARIABLES LIKE '%tmp%'; #查看当前版本 SELECT VERSION(); 常用命令 #查看当前版本,终端下未进入mysql mysq ...

  5. Docker + node(koa) + nginx + mysql 线上环境部署

    在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置 ...

  6. 【mysql】一条慢查询sql的的分析

    这个是我在jobbole.com 上看到的 先给出数据表table结构 mysql> show create table tt \G *************************** 1. ...

  7. mysql线上负载高怎么排查

    作为一个开发人员或者数据库管理员,学会检查数据库运行情况是必不可少的工作.造成MySQL线程卡顿的原因有很多,但是无论是哪种原因,我们发现问题之后的第一要务就是解决问题,防止问题继续恶化.那么,应该如 ...

  8. 一次 MySQL 线上死锁分析实战

    关键词:MySQL Index Merge 前言 MySQL 的锁机制相信大家在学习 MySQL 的时候都有简单的了解过,那既然有锁就必定绕不开死锁这个问题.其实 MySQL 在大部分场景下是不会存在 ...

  9. MySQL中优化常用的查询sql语

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

随机推荐

  1. WIN7只能上QQ打不开网页,使用CMD输入netsh winsock reset

    此类问题可以用腾讯电脑管家电脑诊所一键修复,请点击上方的[立即修复]即可. 附:手动修复步骤(来源:腾讯电脑管家电脑诊所,自动修复请点击上方的[立即修复])方案一:手动设置DNS(说明:如果您使用DN ...

  2. WPF应用程序最小化到系统托盘

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; u ...

  3. python排序算法的实现-插入

    1.算法: 设有一组关键字{ K 1 , K 2 ,…, K n }:排序开始就认为 K 1 是一个有序序列:让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列:然后让 K ...

  4. Zone.js 简介 & 抛砖引玉

    Zone.js是angular团队参照NodeJS的Domain,Dart的Zone,为angular 2开发的核心组件. 一开始,我对Zone.js是拒绝的.我们知道类似的 Domain 模块,主要 ...

  5. Windows 2008 利用Filezilla server搭建FTP

    Windows 2008 利用Filezilla server搭建FTP, 安装后总是提示Error Connection To Server Lost , 后来,无意中先安装了IIS,再安装file ...

  6. Navi.Soft30.开放平台.百度.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  7. android 电量分析工具

    .参考文章:https://developer.android.com/studio/profile/battery-historian.html 这篇文章讲的是如果dump 电量日子文件batter ...

  8. iOS:缓存与Operation优先级问题

    这篇博客来源于今年的一个面试题,当我们使用SDWebImgae框架中的sd_setImageWithURL: placeholderImage:方法在tableView或者collectionView ...

  9. English Metric Units and Open XML

    English Metric Units and Open XML 在Open XML里使用了English Metric Units(EMUs)来作为度量单位.比如 public class Ext ...

  10. SCRIPT1010: 缺少标识符 常见原因

    SCRIPT1010: 缺少标识符 ,一般是在IE下会出现这个问题. 今天在调试一段js代码时,在chrome,ff下均正常,但是在IE下就是一直这样的提示,出现这个问题的原因主要有以下几点: 1.出 ...