日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/11 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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左连接问题,右表做筛选,左表列依然在?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。