问 题

原料

两张表,一张user表,一张user_log表(这个例子举的不好)

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_log` (

`id` int(10) NOT NULL,

`user_id` int(10) NOT NULL,

`log_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

`message` varchar(30) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

问题

现在关联查询

SELECT u.*, ul.log_time, ul.message FROM user u LEFT JOIN user_log ul ON u.id = ul.user_id WHERE ul.log_time > 某个时间点 AND u.id = 4;

这样查询的话,筛选是对连接之后的结果进行的,左表的列不会存在的

我想做到大于某个时间点,右边没有数据,左表的列信息还在,右边列为NULL

可能我没表述清楚把,楼下的回答还是很感谢的:

插入数据

INSERT INTO `user` VALUES ('1', 'wang');

INSERT INTO `user` VALUES ('2', 'meng');

INSERT INTO `user` VALUES ('3', 'zhang');

-- ----------------------------

-- Records of user_log

-- ----------------------------

INSERT INTO `user_log` VALUES ('1', '1', '2017-07-20 13:13:07', 'some data');

INSERT INTO `user_log` VALUES ('2', '1', '2017-07-27 13:13:07', 'some data');

INSERT INTO `user_log` VALUES ('3', '1', '2017-07-28 13:13:07', 'some data');

INSERT INTO `user_log` VALUES ('4', '1', '2017-08-26 13:11:31', 'some data');

INSERT INTO `user_log` VALUES ('5', '1', '2017-08-26 17:11:31', 'some data');

INSERT INTO `user_log` VALUES ('6', '1', '2017-08-27 13:11:31', 'some data');

查询,照楼下的做法:

mysql> SELECT u.*, ul.log_time, ul.message FROM user u LEFT JOIN user_log ul ON u.id = ul.user_id WHERE (ul.log_time > '2017-09-01 07:13:07' OR ul.log_time is NULL) AND u.id = 1;

Empty set

这里其实我想得到结果:

user的信息还是在的,ul的列都是null了

解决方案

把右表的过滤条件放到LEFT JOIN里,才会实现你说的效果,因为WHERE是对关联后的结果做筛选,右表肯定会有值的

SELECT U.*, UL.LOG_TIME, UL.MESSAGE

FROM USER U

LEFT JOIN USER_LOG UL

ON U.ID = UL.USER_ID

AND (UL.LOG_TIME > '2017-09-01 07:13:07' OR UL.LOG_TIME IS NULL)

WHERE U.ID = 1;

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

MySQL左连接还有过滤条件_MySQL左连接问题,右表做筛选,左表列依然在?相关推荐

  1. mysql join 会算笛卡尔积吗_mysql 内连接、左连接会出现笛卡尔积?

    这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积.我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录,则结果集是m条记录(哈哈, ...

  2. mysql连表查询on条件_mysql 外连接的时候,条件在on后面和条件在where后面的区别...

    最近使用mysql的时候碰到一个问题:当一个表外联另一个表的时候,将一些查询条件放在on后面和放在where后面不太一样: 学生分数表stuscore: 当查询语句如下(查询语句1): SELECT ...

  3. MySQL HAVING:指定过滤条件

    在 MySQL SELECT 语句中,除了能使用 GROUP BY 子句分组数据外,还可以使用 HAVING 子句过滤分组,在结果集中规定了包含哪些分组和排除哪些分组. 语法格式如下: HAVING ...

  4. mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...

    max_conecctions:整个MySQL允许的最大连接数 这个参数主要影响的是整个MySQL应用的并发处理能力,当系统中实际需要的连接量大于max_conecctions时,必然会产生连接请求的 ...

  5. mysql命令行如何建库_MySQL心得2--命令行方式建库和表

    1.创建使用create database或create schema命令可以创建数据库.create database 库名create database if not exists 库名(创建库并 ...

  6. mysql 内连接条件_Mysql内连接有OR条件?

    我有两张桌子,如下图 location_distance ---------------------------------------------- id | fromLocid | toLocid ...

  7. mysql远程连接打不开_MySql远程连接无法打开解决办法

    MySql远程连接无法打开解决办法 1.改表法. 请使用mysql管理工具,如:SQLyog Enterprise.navicate mysql 可能是你的帐号不允许从远程登陆,只能在localhos ...

  8. mysql删除数据带in条件_mysql使用delete from where in 删除时报错如何解决

    数据库存在重复的垃圾数据想利用delete from where in删除,语句如下: DELETE FROM tms_daily_plan WHERE tms_daily_plan_id IN ( ...

  9. mysql连接查询(内联)_MySQL之连接查询

    JavaScript面向对象与原型 工厂模式:无法识别对象 function createObject(name, age) { //集中实例化的函数 var obj = new Object(); ...

最新文章

  1. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
  2. Fabric源码分析-共识模块
  3. BPF、eBPF、XDP 和 Bpfilter……这些东西是什么?
  4. 《集体智慧编程》读书笔记2
  5. MySQL通过命令修改密码
  6. hdfs客户端的学习理解
  7. spark记录(6)SparkCore的调优之开发调优
  8. GAT1400---基于libcurl库的开发
  9. 企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!
  10. javascript 图片上传并显示
  11. Windows电脑微信多开方法
  12. mysql多表关联查询慢_mysql数据库多表关联查询的慢SQL优化
  13. Wireshark 设置中文
  14. 图片优化之Base64解决方案
  15. 如何面对工作中的困难和纠结
  16. mc服务器ip是网站,我的世界服务器地址大全
  17. CLR,CTS,CLS
  18. 【黑金动力社区】【531体验板教程】 第三章 开发环境(三)
  19. 如何治好这quot;看见别人好就不幸…
  20. 爱值得 写给深深爱过的人

热门文章

  1. RuntimeException:java.lang.ClassNotFoundException: Class wordcount.WordCountMapper not fonud
  2. C语言(CED)判断一个数是否是2的整数幂的简便方法!
  3. ZOJ 3804 YY's Minions (简单模拟)
  4. 恒流电路的分析(一)
  5. win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格
  6. mysql迁移至postgresql_PostgreSQL来自欧罗巴Patroni系列技术主题一
  7. TensorFlow构建二维数据拟合模型(2)
  8. java线程堆栈_深入JVM剖析Java的线程堆栈
  9. Linux与Windows共享文件夹之samba的安装与使用 资源管理器直接查看服务器文件
  10. POJ1061:青蛙的约会——题解