RT现在有一个表table A,里面的字段如下:S_ID, S_CODE, S_CREATE_BY, S_CREATE_DATE, S_MODIFY_BY, S_MODIFY_DATE其中多个S_CODE对应一个S_ID,该表中目前只有S_ID=1对应的数据是完整的,有10条记录。每一个S_ID都对应一套S_CODE字段,如1-->"a",1-->"b" ...
这样,现在S_ID<> 1的数据都不完整,如何将这些不完整的数据补齐呢?想法:查询出该表的S_ID,如总共有5个,除去S_ID=1的还剩4个,这四个S_ID分别要对应插入S_ID=1的对应那10条记录
怎么去实现呢?可能讲的有点模糊

解决方案 »

  1.   

    给你提供个思路:
     1、先删除s_id不为1的所有记录;
     2、定义一个存储过程或者函数;
     3、对S_ID=1的记录进行循环,可以用游标;
     4、每次循环都通过insert语句插入s_id为另外4个的四条记录,循环结束,也就插入了40条。
    不晓得我理解的可对,这样写SQL也很简单。
      

  2.   


    这段理解是正确的,但是S_ID这个字段并不是数字,而是未知的,我这里只是简便的说明
      

  3.   

    你的这个问题是要得一个S_ID和S_Code的笛卡尔积吗?如果是,用一句INSERT就能实现。
    insert ...
      select ...
      from (select distinct S_ID from A) aaa, (select distinct S_CODE from A) bbb
      where not exist (select 1 from A where S_ID = aaa.S_ID and S_CODE = bbb.S_CODE);
      

  4.   

    INSERT INTO A_TAB .. .
      SELECT .. .
        FROM (SELECT DISTINCT S_ID FROM A_TAB WHERE S_ID <> '1') A,
             (SELECT DISTINCT S_CODE FROM A_TAB WHERE S_ID = '1') B
       WHERE NOT EXIST (SELECT 1
                FROM A_TAB C
               WHERE C.S_ID = A.S_ID
                 AND C.S_CODE = B.S_CODE);这么着吧!