sql如何合并两张表




如图,A表、B表是两个记录表,希望用name字段汇总生成结果。(a表含全部的name,b表不一定)

例如,a表有3个a1的记录,b表有1个a1记录,那么结果就是3个a1记录,并且a表的a_time、a_count可填充3行,而b表由于只有1个a1记录,故b_seal、b_num只能填充1行,剩下2行用null填充。

a1 是左外连接 b2 是右外连接

请写出完整的sql语句,需要在数据库运行一下

select * from a left join b on a.name = b.name where a.name = a1 or c3

select * from a right join b on a.name = b.name where a.name = b2 or d4

目前我只会这样做

bosaidongmomo,大神,昨天我的提问,就是下载文件那个,对您的代码我还有个问题,可以私信一下吗

where a.name = a1 or c3,这。。。a1、b2、c3、d4是假设的人名,有上万个,不能写死

那我知道了。你得先去查一下。谁只有一条记录。

反正你这个需求令我头大2333

A表好比是每天签到的考勤表,B表是每天工作的日志表,需求是想按name汇总起来看,不一一对应,比如张一的所有考勤和工作日志,全部被张一的name列包含

要不然你用两次left join 可能也能达到目的

循环找

为什么只合并第一条记录(比如左表的a1 合并后两行null ,右表的b2,两行null);

如果左侧e5 两个记录,右侧e5 三个记录,你要合并为几条记录?

还是不会出现这种情况,如果是,为什么不会出现这种情况


一般的逻辑是全连接查询

返回结果数为,左表*右表,比如a1 有3*1=3条记录,b2有1*3=3条记录,e5有2*3=6条记录

select a.user_name, a.mobile, a.`password`,b.num, b.seal from table_a a LEFT JOIN table_b b

on a.user_name = b.user_name


UNION


select a.user_name, a.mobile, a.`password`,b.num, b.seal from table_b b LEFT JOIN table_a a

on a.user_name = b.user_name