sql参照性删除问题

zhangp_04 发布于 2013/04/14 15:42
阅读 149
收藏 0
各位大哥大姐 我有个sql不知道怎么写了 琢磨了半天也没没整出来,现在跟大哥说说,给提供个解决办法

我有两个表 一个title表 一个value表

title表字段如下:
datacode varchar(30), -主键
row   int,     记录标题的序号
titleval varchar(30)   -标题的名字


value表字段如下:
datacode varchar(30)  -主键
row int -主键  行值
col int -主键  列值
datavalue  --标题对应的数值




比如有如下数据:

title表:

datacode     row     titleval 
------------------------------
  aaa         1        列1
  aaa         2        列2
  aaa         3        列3

  bbb         1        列3
  bbb         2        列1
  bbb         3        列2
value表:

datacode    row   col    value
-------------------------------
  aaa        1     1       1
  aaa        1     2       3
  aaa        1     3       5
  aaa        2     1       2
  aaa        2     2       4
  aaa        2     3       6

  bbb        1     1       5
  bbb        1     2       6
  bbb        1     3       3
  bbb        2     1       2
  bbb        2     2       3
  bbb        2     3       4




create table MM_DATATITLE
(
    DataCode            VARCHAR(25)            not null,
    Row                 INTEGER                not null,
    TitleVal            VARCHAR(60),
    TitleType           CHAR(1),
   constraint  P_Key_1  primary key ( DataCode ,  Row )
)
in TBS1
 index in TBS_IDX;



create table MM_DATAVALUE
(
    DataCode            VARCHAR(25)            not null,
    Col                 INTEGER                not null,
    Row                 INTEGER                not null,
    DataVal             VARCHAR(60),
   constraint  P_Key_1  primary key ( DataCode ,  Col ,  Row )
)
in TBS1
 index in TBS_IDX;



比如:


现在有两个矩阵   一个是参照的数据 另个是要进行对其参数的数据 
标题对应在title表中
标题对应的值在 value表中


现在在页面上我有个选项 就是可以选择这个参数数据的标题(title表中的titlevalue字段)

还拿上面的数据来说 :

     要进行删除的 --xxx                        参照的数据--yyy
datacode   列1  列2  列3               datacode   列3  列1   列2
-------------------------              -------------------------
  aaa       1     4   6                  bbb       5    6    3
  aaa       2     3   5                  bbb       2    3    4


1.我选择了要参照的数据(yyy)的  列2 这列  那么列2中 有 3和4  
拿 3比较  要进行删除的(xxx)的 列2  xxx的列2 也有3 那么 删除xxx的 第2行数据

然后yyy的列2中的4 在 xxx的列2中也存在 那么 xxx的 第一行数据要删除

进行完上述操作后 等于 没有数据需要插入到title和value两个表了

2.我选择了要参照的数据(yyy)的  列2和列3 这两列  在 yyy中 列2中的3 和列3中的 5属于同一行数据  他们和xxx中的列2和列 3 的值相等  那么删除xxx中的这一整行数据 只保留xxx中的第一行数据  ,把保留的xxx的第一行数据 生成新的datacode 然后把相应 的title表字段和value表字段 依据xxx的title字段和value字段 插入到title表和value表

以上两点不是对xxx表进行删除 是把比较后得到的数据 再插入到title和value表 datacode生成个新的

拿参照数据(yyy) 比较 (xxx) 根据上面规则 生成 zzz 新数据到 title表和value表

加载中
0
hulubo
hulubo
按1列:
select * from value where datacode='aaa' and row not in (select row from value
where datacode='aaa'  and (col,value) in
(select col,value from value where datacode='bbb' and col=:input));

按2列:
for :inrow in 1 .. 行数  loop
select * from value
where datacode='aaa' and row not in (
  select row from where datacode='aaa' and (col,value)  in (
       select row, col,value from value
        where datacode='bbb' and row=:inrow
          and col in(:input1,:input2)) 
   group by row having count(row)=2);
end loop ;

z
zhangp_04
谢谢
返回顶部
顶部