MySQL左连接还有过滤条件_MySQL左连接问题,右表做筛选,左表列依然在?
问 题
原料
两张表,一张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左连接问题,右表做筛选,左表列依然在?相关推荐
- mysql join 会算笛卡尔积吗_mysql 内连接、左连接会出现笛卡尔积?
这周的部门周会,分享的同事说的是数据库优化相关,过程中,一个同事跟我讨论左连接查询,是不是笛卡尔积.我第一反应,左连接肯定不是笛卡尔积啊,左连接是以左表为准,左表有m条记录,则结果集是m条记录(哈哈, ...
- mysql连表查询on条件_mysql 外连接的时候,条件在on后面和条件在where后面的区别...
最近使用mysql的时候碰到一个问题:当一个表外联另一个表的时候,将一些查询条件放在on后面和放在where后面不太一样: 学生分数表stuscore: 当查询语句如下(查询语句1): SELECT ...
- MySQL HAVING:指定过滤条件
在 MySQL SELECT 语句中,除了能使用 GROUP BY 子句分组数据外,还可以使用 HAVING 子句过滤分组,在结果集中规定了包含哪些分组和排除哪些分组. 语法格式如下: HAVING ...
- mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...
max_conecctions:整个MySQL允许的最大连接数 这个参数主要影响的是整个MySQL应用的并发处理能力,当系统中实际需要的连接量大于max_conecctions时,必然会产生连接请求的 ...
- mysql命令行如何建库_MySQL心得2--命令行方式建库和表
1.创建使用create database或create schema命令可以创建数据库.create database 库名create database if not exists 库名(创建库并 ...
- mysql 内连接条件_Mysql内连接有OR条件?
我有两张桌子,如下图 location_distance ---------------------------------------------- id | fromLocid | toLocid ...
- mysql远程连接打不开_MySql远程连接无法打开解决办法
MySql远程连接无法打开解决办法 1.改表法. 请使用mysql管理工具,如:SQLyog Enterprise.navicate mysql 可能是你的帐号不允许从远程登陆,只能在localhos ...
- mysql删除数据带in条件_mysql使用delete from where in 删除时报错如何解决
数据库存在重复的垃圾数据想利用delete from where in删除,语句如下: DELETE FROM tms_daily_plan WHERE tms_daily_plan_id IN ( ...
- mysql连接查询(内联)_MySQL之连接查询
JavaScript面向对象与原型 工厂模式:无法识别对象 function createObject(name, age) { //集中实例化的函数 var obj = new Object(); ...
最新文章
- 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
- Fabric源码分析-共识模块
- BPF、eBPF、XDP 和 Bpfilter……这些东西是什么?
- 《集体智慧编程》读书笔记2
- MySQL通过命令修改密码
- hdfs客户端的学习理解
- spark记录(6)SparkCore的调优之开发调优
- GAT1400---基于libcurl库的开发
- 企业网站应用模式之—LAMP架构的源码编译超详细步骤,有手就行!
- javascript 图片上传并显示
- Windows电脑微信多开方法
- mysql多表关联查询慢_mysql数据库多表关联查询的慢SQL优化
- Wireshark 设置中文
- 图片优化之Base64解决方案
- 如何面对工作中的困难和纠结
- mc服务器ip是网站,我的世界服务器地址大全
- CLR,CTS,CLS
- 【黑金动力社区】【531体验板教程】 第三章 开发环境(三)
- 如何治好这quot;看见别人好就不幸…
- 爱值得 写给深深爱过的人
热门文章
- RuntimeException:java.lang.ClassNotFoundException: Class wordcount.WordCountMapper not fonud
- C语言(CED)判断一个数是否是2的整数幂的简便方法!
- ZOJ 3804 YY's Minions (简单模拟)
- 恒流电路的分析(一)
- win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格
- mysql迁移至postgresql_PostgreSQL来自欧罗巴Patroni系列技术主题一
- TensorFlow构建二维数据拟合模型(2)
- java线程堆栈_深入JVM剖析Java的线程堆栈
- Linux与Windows共享文件夹之samba的安装与使用 资源管理器直接查看服务器文件
- POJ1061:青蛙的约会——题解