如图,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