求帮忙看下 小弟我的这个匹配查询存储过程的语句该如何写

求帮忙看下 我的这个匹配查询存储过程的语句该怎么写
有JA,YI,BI,DI与MMDATA表逐个匹配,(如果有相同的字段插入YDATA表,如果YDATA表中已经有此字段,则不插入YDATA表),MDATA表可能包含JA,YI,BI,DI四张表的全部数据,求帮忙看下:               
JA,YI,BI,DI,MMDATA,YDATA共有字段JNAME  ,如果JA和YI中都有值AA,那JA 匹配后AA 插入YDATA,YI匹配的时候AA 就不用再插入,本人新手,代码乱请见谅,我是用的游标逐个匹配


  
create proc proo
@ss varchar(255)
as
declare @i int,@j int,@ch varchar(255),@sql nvarchar(1000),@m int ,@n int,@ar varchar(255)
set @i =1
set @m =1
-------------------匹配后的行数
set @sql = 'select @a=count(b.jname) from  '+ @ss + '  as a inner join mmdata as b on a.jname=b.jname'
exec sp_executesql @sql,N'@a int output',@j output

declare  cu SCROLL cursor
for 
select b.jname from ja as a inner join mmdata as b on a.jname=b.jname
open cu
while @i<=@j
      begin
      fetch absolute @i from  cu into @ch
--------------------如果YDATA 没有数据,则吧匹配的插入此表
      if not exists (select * from ydata)
         begin
         insert into ydata(jname) values (@ch)
         end
      else
         begin
           set @n=(select count(d.jname) from ydata as d)
           declare  cur SCROLL cursor
           for 
           select d.jname from ydata as d
           open cur
---------------------如果YDATA存在数据,并且输出的数据和前面匹配的数据不相等,则插入匹配数值到YDATA
           while @m<=@n
             begin
               fetch absolute @m from  cur into @ar
               if @ch!=@ar
                                 insert into ydata(jname) values (@ch)
              end
             set @m=@m+1
          end
        close cur
        deallocate cur
        set @i=@i+1
  end
close cu
deallocate cu

发现问题出到 else后面的语句    后面的while感觉没循环,求精通的朋友指点下
------解决思路----------------------
Insert Into YDATA(JName)
Select JName From (
Select JName From JA
Union
Select JName From YI
Union
Select JName From BI
Union
Select JName From DI
Union
Select JName From MMDATA) A
Left Join YData B On B.JName = A.JName
Where IsNull(B.JName,N'') = N''


用这个试试,不需要循环的哇
------解决思路----------------------
INSERT INTO YDATA(JName)
SELECT A.JName
FROM(
SELECT JName From JA
UNION
SELECT JName From YI
UNION
SELECT JName From BI
UNION
SELECT JName From DI
)A 
JOIN MMDATA B ON A.JName=B.JName
LEFT JOIN YData C On A.JName=C.JName
WHERE C.JName IS NULL