一、准备两张表,文章表和评伦表

CREATE TABLE `article` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`title` varchar(255) DEFAULT '' COMMENT '文章标题',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表'; CREATE TABLE `comment` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`a_id` int(11) DEFAULT '0' COMMENT '文章ID',
`content` varchar(255) DEFAULT '' COMMENT '评伦内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评伦表';

随便搞点测试数据

我们运行如下语句:

select * from article as a left join comment as c on c.a_id = a.id;

结果如上所示,主表中有多条记录重复显示了,因为条件 on c.a_id = a.id 主表中的一条记录对应右表中的多条记录,这种1 : n 的情况,

left join 的处理方法是主表以重复的方式对应多条右表记录出现在结果集中。

但是这显然不是我们想要的。我们想要以 article 为主表,1 : 1 的显示右表数据。

方法一:使用group by ,找出右表一条记录与主表关联

select * from article as a
left join (select id, a_id, content from comment group by a_id) as c
on c.a_id = a.id;

方法二:使用group by 和 min或max聚合函数,找出右表最新或最旧的一条记录与主表关联

select * from article as a
left join (select * from comment where id in (select max(id) from comment group by a_id)) as c
on c.a_id = a.id;

方法三:使用group_concat

select * from article as a
left join (select a_id, group_concat(concat(id, ',', content) order by id desc separator '_') from comment group by a_id) as c
on c.a_id = a.id;

所有解决办法,都是一个出发点,使主表与右表的对应关系为1 : 1。

mysql left join 多条记录 1:n 的处理方法的更多相关文章

  1. php实现只保留mysql中最新1000条记录

    这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  2. mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ...

  3. mysql中插入多条记录-微软批处理

    当向mysql中插入大量数据时,可以使用微软的批处理方式.这样可以防止内存溢出又提高了效率.我写了一个mysql中插入多条记录的例子.赋值代码可以直接使用. 1.首先需要添加两个dll MySql.D ...

  4. mysql 批量更新与批量更新多条记录的不同值实现方法

    作者: 字体:[增加 减小] 类型:转载 时间:2013-10-02 我要评论 在mysql中批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql ...

  5. mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法

    mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新 ...

  6. 【转】【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other ...

  7. 转载 【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other ...

  8. 关于mysql查询最近一条记录

    关于mysql查询最近一条记录 最近项目中遇到需要查询记录当前时间最近的一条记录的问题,开始感觉无从下手,后来逐步发现了三种解决方案. 下策——查询出结果后将时间排序后取第一条 select * fr ...

  9. 【MySql】Update批量更新与批量更新多条记录的不同值实现方法

    mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_valu ...

随机推荐

  1. python实现根据指定字符截取对应的行的内容

    工作中遇到的,在一个.c文件中有很多函数,这个.c是自动生成的,需要将所有的函数通过extern放到.h中,每个函数都是UINT32 O_开头,通过正则表达式进行字符匹配以及通过linecache来截 ...

  2. 29.Spring-基础.md

    目录 1.目的和作用 [toc] 2.概念 2.1框架的设计 2.2控制反转 2.3AOP [toc] 3. 3.1Spring六大模块 [toc] 1.目的和作用 解决对象的创建和以及对象依赖关系的 ...

  3. 自定义 mapper的实现

    json格式,要想好看直接百度,json,将字符放进去就可 一步:将mapper复制一份,名字加一个Custom自定义 二步:mpper.xml也是一样,设置里面的namespace映射关系 自定义m ...

  4. 带报表的asp.net项目不要升级

    原来项目是用vs2008开发的,框架是3.5的.刚去公司项目就感觉比较乱,来来去去了几波人.所以我想统一把它升级成vs2010框架4.0. 结果页面经常报错,什么脚本找不到不存.后台脚本是用这句来添加 ...

  5. shiro 密码的MD5盐值加密

  6. python脚本

    python源码编译 python -O -m py_compile file.py [root@localhost python]# cat dbass.py #!/usr/local/bin/py ...

  7. room 二分图最大匹配KM

    #include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f #define fio ...

  8. 开启swap交换分区

    开启swap 1.创建用于交换分区的文件: dd if=/dev/zero of=/mnt/swap bs=1M count=2048 注:block_size.number_of_block 大小可 ...

  9. 利用反射绑定事件处理程序(C#)

    利用反射绑定事件处理程序(C#) 传统的写法:强类型的情况下 using System;using System.Collections.Generic;using System.Text; usin ...

  10. cf-Round551-Div2-D. Serval and Rooted Tree(DP)

    题目链接:https://codeforces.com/contest/1153/problem/D 题意:有一棵树,给定结点数n,在每个结点上的操作(max:表示该结点的number为其孩子结点中的 ...