MySQL在右表数据不唯一的情况下使用left join的方法

作者:傲雪星枫 时间:2024-01-18 22:42:02 

1.left join 基本用法

mysql left join 语句格式
A LEFT JOIN B ON 条件表达式

left join 是以A表为基础,A表即左表,B表即右表。
左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL。

例如:news 与 news_category表的结构如下,news表的category_id与news_category表的id是对应关系。

news 表

MySQL在右表数据不唯一的情况下使用left join的方法

news_category 表

MySQL在右表数据不唯一的情况下使用left join的方法

显示news表记录,并显示news的category名称,查询语句如下


select a.id,a.title,b.name as category_name,a.content,a.addtime,a.lastmodify  
from news as a left join news_category as b  
on a.category_id = b.id;

查询结果如下:

MySQL在右表数据不唯一的情况下使用left join的方法

因 news_category 表没有id=4的记录,因此news 表中category_id=4的记录的category_name=NULL

使用left join, A表与B表所显示的记录数为 1:1 或 1:0,A表的所有记录都会显示,B表只显示符合条件的记录。

2.left join 右表数据不唯一解决方法

但如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数。

例如:member与member_login_log表的结构如下,member记录会员信息,member_login_log记录会员每日的登入记录。member表的id与member_login_log表的uid是对应关系。

member 表

MySQL在右表数据不唯一的情况下使用left join的方法

member_login_log 表

MySQL在右表数据不唯一的情况下使用left join的方法

查询member用户的资料及最后登入日期:
如果直接使用left join


select a.id, a.username, b.logindate
from member as a  
left join member_login_log as b on a.id = b.uid;

因member_login_log符合条件的记录比member表多(a.id = b.uid),所以最后得出的记录为:

MySQL在右表数据不唯一的情况下使用left join的方法

但这并不是我们要的结果,因此这种情况需要保证B表的符合条件的记录是空或唯一,我们可以使用group by来实现。


select a.id, a.username, b.logindate
from member as a  
left join (select uid, max(logindate) as logindate from member_login_log group by uid) as b
on a.id = b.uid;

MySQL在右表数据不唯一的情况下使用left join的方法

总结:使用left join的两个表,最好是1:1 或 1:0的关系,这样可以保证A表的记录全部显示,B表显示符合条件的记录。
如果B表符合条件的记录不唯一,就需要检查表设计是否合理了。

标签:MySQL,左连接
0
投稿

猜你喜欢

  • 升级和卸载Oracle数据库软件的命令整理

    2024-01-16 18:15:37
  • 详解Python实现进度条的4种方式

    2023-07-05 13:31:16
  • Python检查ping终端的方法

    2023-04-16 07:03:37
  • 一起来了解python的运算符

    2022-08-29 03:01:17
  • Python同时向控制台和文件输出日志logging的方法

    2021-10-12 07:35:11
  • 对用户进行电话访谈的一点感想

    2009-12-28 13:05:00
  • python 函数、变量中单下划线和双下划线的区别详解

    2021-06-29 11:32:33
  • Python浅析多态与鸭子类型使用实例

    2023-10-25 00:09:06
  • SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)

    2024-01-14 06:54:35
  • 在ASP与ASP.NET之间共享对话状态(2)

    2008-09-02 12:21:00
  • 解决Unable to access 'https://gitee.com/自己的项目/': Could not resolve host: gitee.com问题

    2023-11-06 06:47:59
  • 五分钟带你搞懂python 迭代器与生成器

    2021-08-24 19:25:10
  • Dreamweaver使用快技法十三则

    2009-07-21 12:45:00
  • python如何读取和存储dict()与.json格式文件

    2021-12-07 16:13:36
  • Oracle 正则表达式实例详解

    2024-01-25 23:43:01
  • Python实现人脸识别的详细图文教程

    2022-12-28 04:45:53
  • Python实现获取照片的地理定位信息

    2023-06-30 01:39:54
  • Javascript(es2016) import和require用法和区别详解

    2024-04-19 09:57:04
  • Python实现对照片中的人脸进行颜值预测

    2023-04-05 18:21:12
  • 如何让用户再次访问我的网站时不需再提交相关信息?

    2010-05-16 15:05:00
  • asp之家 网络编程 m.aspxhome.com