各位老师好,我有一个SQL语句的问题,一直写不出来,请各位老师指点一下,谢谢。
简单说,以表1为基础,从表2中提取符合要求的数值,形成表3,详见下面例子。
表1
ID 名称
1 AAAAAAAAAA
2 BBBBBBBBBB
3 CCCCCCCCCC
4 DDDDDDDDDD
表2
ID 名称 更新时间
34 BBBBBBBBBB 6月2日
35 AAAAAAAAAA 6月1日
36 CCCCCCCCCC 6月9日
37 BBBBBBBBBB 5月1日
38 BBBBBBBBBB 4月8日
39 CCCCCCCCCC 3月6日
40 CCCCCCCCCC 6月3日
41 DDDDDDDDDD 7月1日
42 DDDDDDDDDD 7月3日
43 DDDDDDDDDD 3月4日
表3 (希望通过SQL语句实现这个表的效果)
ID 名称 最后更新时间
1 AAAAAAAAAA 6月1日
2 BBBBBBBBBB 6月2日
3 CCCCCCCCCC 6月9日
4 DDDDDDDDDD 7月3日
------解决方案--------------------
select a.ID,a.名称,max(b.更新时间)更新时间
from a inner join b on a.名称=b.名称
group by a.ID,a.名称
------解决方案--------------------
select aa.ID ,aa.名称,bb.更新时间 from 表1 aa left join
(select bb.名称,max(bb.更新时间) 更新时间 from 表2 group by bb.名称) bb
on aa.名称=bb.名称
------解决方案--------------------
select a.ID,a.名称,max(b.更新时间)更新时间
from a left join b on a.名称=b.名称
group by a.ID,a.名称
------解决方案--------------------
可用left join
------解决方案--------------------
create table 表1
(ID int,
名称 char(20))
insert into 表1 values
(1,'AAAAAAAAAA'),
(2,'BBBBBBBBBB'),
(3,'CCCCCCCCCC'),
(4,'DDDDDDDDDD')
select * from 表1
create table 表2
(ID int,
名称 char(20),
更新时间 char(10))
insert into 表2 values
(34,'BBBBBBBBBB','6月2日'),
(35,'AAAAAAAAAA','6月1日'),
(36,'CCCCCCCCCC','6月9日'),
(37,'BBBBBBBBBB','5月1日'),
(38,'BBBBBBBBBB','4月8日'),
(39,'CCCCCCCCCC','3月6日'),
(40,'CCCCCCCCCC','6月3日'),
(41,'DDDDDDDDDD','7月1日'),
(42,'DDDDDDDDDD','7月3日'),
(43,'DDDDDDDDDD','3月4日')
select * from 表2
select a.ID,a.名称,MAX(更新时间) 最后更新时间 from 表1 a
left join 表2 b
on a.名称=b.名称
group by a.ID,a.名称
insert into 表1 values
(5,'EEEEEEEEEE')
select a.ID,a.名称,MAX(更新时间) 最后更新时间 from 表1 a
left join 表2 b
on a.名称=b.名称
group by a.ID,a.名称
动手测试了一下,可以满足你的要求!
------解决方案--------------------
所有没有用聚合函数包住的列都要在group by里面,除了那些自定义的列,如 select 'a' as col这种