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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何根据A表内容更新B表.相关的知识,希望对你有一定的参考价值。

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

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

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变成这样:

追问

测试有效

参考技术A 一条sql语句恐怕是搞不定的,可用A表游标遍历,查询b表中的记录数,当记录数为n且n<2时,执行2-n次插入语句。 参考技术B 首先表格设计就有问题,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)中文来的,不要直接复制
参考技术C 这B表是神马表。。。字段都能重复出现? ai1 ai2 ai3?什么意思

SQL数据库中如何从A表自动更新数据到B表?

假设有两张表,A表中有销售订单号,销售日期,货品名称,规格,型号,数量,销售单价,销售金额,审核人 字段,B表有订单号,销售日期,货品名称,规格,型号,数量,销售单价,销售金额,订单是否下达 字段, 希望当A表有新插入数据时并且审核人不为空时,自动更新到B表,当A表审核人为空时,自动删除B表中对应的数据,是如果B表中订但单是否下达标志为Y时,则不删除,当B表中订单是否下达标志为空时,则删除。

参考技术A SQL不能做这样的逻辑判断吧,应该使用java语言或者其他语言来控制判断吧,设置一下多表关系,然后在后台读出做判断,在通过使用hibernate关联关系,把表设成2个关联的对象。。。当你判断是需要增加的时候,把两个对象互相加到对方的对象中就可以(要注意的是在对象类:表中,要设定对方对象的属性),不知道能否给你带来有用的信息,望采纳。 参考技术B 写一个insert触发器在A表上
自己根据想要的条件应该懂一点的就应该能写出来
insert触发器在你插入数据到A表的时候,你的数据在系统默认的inserted表中存着,你可以在这里面找条件
参考技术C 要实现两个表之间的数据的自动更新,可以采用触发器来实现,触发器的实现方法:
1、A表有数据更新的时候自动更新B表:
create or replace trigger tg after update on A for each row
begin
update B set xx=xx where b.aid = a.id;
end;
/
2、A表插入数据时,B表更新数据:
create or replace trigger tgg after insert on A for each row
begin
insert B values(xxxx);
end;
/
如果不需要每条数据都跟新,只需要在每次A更新的时候更新B,可以将后面的for each row去掉。
参考技术D 写个触发器trigger 第5个回答  推荐于2017-11-26 使用触发器
create trigger 触发器名称
on A
as
begin
declare @审核人 varchar(100)
select @审核人 = 审核人 from inserted
if @审核人 <> null
insert B ( 列名全写出来 )
else
delete B where 条件 and 标志 <> 'Y'
end追问

如果我只是从A表中选择几列来进行插入到B表,是否要写对应插入到B的哪几列的?

追答

插入的话不用写对应到表B的哪几列的

本回答被提问者采纳

以上是关于SQL如何根据A表内容更新B表.的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何根据一个字段的某个关键词的前面部分分组查询

SQL数据库中如何从A表自动更新数据到B表?

SQL根据B表内容修改A表内容

SQL update 的更新值来源于另外一个表,如何实现?

在SQL中统计一个字段 然后再更新到另一张表的一个字段

SQL:如何将一个表中某个字段的值全部更新到另外一个表相应的字段