select case when b.a_other_field1 is null then a.a_other_field1 else b.a_other_field1 end as 字段1, ...from a left join b on b.a_key1=a.a_key1 and b.a_key2=a.a_key2
解决方案 »
- sql循环语句怎么写
- 关于排序的问题
- 这句SQL用联结怎么写?
- 请教大家完成这样要求的SQL语句如何编写?
- 100 分求一条sql 语句 知道数据库名称, 但是不知道表名 如何查询出这个数据库所有的用户表 注意: 只查用户表 系统表不查
- 存储过程中使用Table类型的问题
- 数据库两表链接!
- sql server2008无法监听1433端口
- 关于数据导入问题!如果将Excle表中指定字段(列)的数据导入到SQL Server中指定表的指定字段中去?
- 能 Execute(@select + @where) into #temp_01 吗?
- 头条!头条!个人版的SQLServe200无法通过网络登陆吗?
- 高分求锁例
--其他字段用同樣方法處理
from a left join b on b.a_key1=a.a_key1 and b.a_key2=a.a_key2
--其他字段用同樣方法處理
from a left join
(SELECT A.a_key1,A.a_key2,B.a_other_field1,B.a_other_field1,B...
FROM
(select a_key1,.a_key2 ,max(update_time) as max_update_time
from b
group by a_key1,.a_key2
) as
A inner join b as B
on B.a_key1=A.a_key1 and B.a_key2=A.a_key2 and B.update_time=A.max_update_time
) AS
b on b.a_key1=a.a_key1 and b.a_key2=a.a_key2
--其他字段用同樣方法處理
from a left join
--根據導出的表再關聯本表,找到最後更改的記錄的其他字段
(SELECT A.a_key1,A.a_key2,B.a_other_field1,B.a_other_field1,B...
FROM
--提取最後更改的記錄(因為最後更改的時間+主鍵 是唯一的)
(select a_key1,.a_key2 ,max(update_time) as max_update_time
from b
group by a_key1,.a_key2
) as
A inner join b as B
on B.a_key1=A.a_key1 and B.a_key2=A.a_key2 and B.update_time=A.max_update_time
) AS
b on b.a_key1=a.a_key1 and b.a_key2=a.a_key2
--提取最後更改的記錄(因為最後更改的時間+主鍵 是唯一的)
(select a_key1,a_key2 ,max(update_time) as max_update_time
from b
group by a_key1,a_key2
) as 時間字段若是字符型就用以上方法處理,若是日期型就用datediff函數比較:select datediff(ss,時間1,時間2)=0 --等於0表相等,精確到秒
select datediff(dd,時間1,時間2)=0 --等於0表相等,精確到天
祥細可見幫助
,a_other_field1=isnull(b.a_other_field1,a.a_other_field1)
,a_other_field2=isnull(b.a_other_field2,a.a_other_field2)
,....
from a表 a left join(
select a.* from b表 a join(
select b_key=min(b_key) from b表 aa join(
select a_key1,a_key2,update_time=max(update_time)
from b表 group by a_key1,a_key2
)bb on aa.a_key1=bb.a_key1 and aa.a_key2=bb.a_key2
and aa.update_time=bb.update_time
)b on a.b_key=b.b_key
)b on a.a_key1=b.a_key1 and a.a_key2=b.a_key2
select a_key1,a_key2
,a_other_field1=isnull(b.a_other_field1,a.a_other_field1)
,a_other_field2=isnull(b.a_other_field2,a.a_other_field2)
,....
from a表 a left join(
select a.* from b表 a join(
select b_key=min(b_key) from b表 aa join(
select a_key1,a_key2,update_time=max(update_time)
from b表 group by a_key1,a_key2
)bb on aa.a_key1=bb.a_key1 and aa.a_key2=bb.a_key2
and aa.update_time=bb.update_time
)b on a.b_key=b.b_key
)b on a.a_key1=b.a_key1 and a.a_key2=b.a_key2
update_time可能相同的情况,此时取主键最小的那条记录: min(b_key)
如果是取b_key最大的记录,相应的函数修改为max即可