SQL 表A(id,no,name)、表C(no)怎么判断每个人缺少的no并且把缺少的新增进表A

表A数据
(1,'A','张三')
(1,'B','张三')
(2,'A','李四')
(3,'B','王五')

表C数据
(A)
(B)
(C)

怎么判断每个人缺少的no并且把缺少的新增进表A ???
如张三缺少C,则新增(1,'C','张三');
李四缺少B、C,则新增(2,'B','李四')(2,'C','李四')
以此类推、、、

 create table ma(
   id int,
   fe varchar(20),
   vname varchar(20)
);
insert into ma values(1,'A','张三');
insert into ma values(1,'B','张三');
insert into ma values(2,'A','李四');
insert into ma values(3,'B','王五');
create table mb(
  fe varchar(20)
);

insert into mb values('A');
insert into mb values('B');
insert into mb values('C');
insert into ma(id,fe,vname) values(
SELECT id,vname,fe FROM (
select c.*,c.vname + ','+c.fe as kid from (
select * from 
(
select distinct id,vname from ma
) a,
(select fe from mb)
b 
) c 
) D 
where kid not in(SELECT VNAME+','+FE FROM ma)
)

对表C来说,你采用推的方式;当表C有新增项的时候,你就往表A写。

写一个存储过程,通过repeat遍历A表的数据,然后对每一条数据进行查询,看是否在C表中存在相应的no,如果不存在,就插入一条数据在A中,具体写法可以在网上找找。

create table ma(
id int,
fe varchar(20),
vname varchar(20)
);
insert into ma values(1,'A','张三');
insert into ma values(1,'B','张三');
insert into ma values(2,'A','李四');
insert into ma values(3,'B','王五');
create table mb(
fe varchar(20)
);

insert into mb values('A');
insert into mb values('B');
insert into mb values('C');

INSERT INTO MA SELECT * FRM (
SELECT MA.ID,MA.NAME,MB.NO
FROM MA
JOIN MB AND MA.NO <>MB.NO
)

假设表a的3个字段是id,code,name,其中id和name是一一对应的,是吧;
表c的字段是code,不重复,那么下面这个语句就可以了

insert into a
select x.id,c.code,x.name from
(select distint id,name from a) x,c
minus
select id,code,name from a;

解释一下:x表是所有的id和name组合,c表是所有code组合,做1个笛卡尔积查询就是所有的id、code、那么组合
再minus表a中已经存在的组合,就把剩下缺的组合加进去了