SQL如何根据A表内容更新B表.

表A有ai1,ai2,ai3.3个用户记录.表B有表A用户每天2个的记录.如图

请问当B表中没有A表用户的记录或者只有一个记录时,如何通过语句增加缺失的那部分记录?
Time是A表用户在B表加记录时的自动时间.不固定的.
最新回答
ぃ伊丽莎白鼠

2024-11-03 00:27:17

declare @sql varchar(2000);
set @sql='';
select @sql=@sql+(
case(count(b.time)) 
--若没有记录,则插入两条
when 0 then 'insert into [表B] select '''+a.name+''',getdate() union all select '''+a.name+''',getdate();' 
--若已有一条记录,则再插入一条
when 1 then 'insert into [表B] select '''+a.name+''',getdate();'
--若已有两条或以上,则不再插入
else ' ' 
end)
from [表A] a left join [表B] b on a.name=b.name
group by a.name;
exec(@sql);

假设表B中本来是这样的:

那么执行上面语句后,表B变成这样:

追问
测试有效
沉默我的资本の

2024-11-03 10:16:12

一条sql语句恐怕是搞不定的,可用A表游标遍历,查询b表中的记录数,当记录数为n且n<2时,执行2-n次插入语句。
猫腻仙女

2024-11-03 08:30:04

首先表格设计就有问题,b表应该设置a表的外键,a表应该设计索引字段ID,b表的name字段要换成ID字段,这样a表修改name时才不会要同时修改b表
然后说外键,b表要对它依赖于a的字段设a对应字段的外键,右键表格、属性,在下面那个什么更新、删除那里将什么都不做改成级联,这样a表删除name就能自动把b的删掉,而且a没有的b加不进去。
最后你的问题用where b.name not in (select name from a)中文来的,不要直接复制
酱紫—喵

2024-11-03 01:28:25

这B表是神马表。。。字段都能重复出现? ai1 ai2 ai3?什么意思