各位好,
问题如下。有2个表,table_a和table_b
table_a的字段: PRODUCT1, PRODUCT2, PRODUCT3,
  SERIAL1, SERIAL2, SERIAL3,
  SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
  SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
  XXX1, XXX2...table_b的字段: PRODUCT1, PRODUCT2, PRODUCT3,
  SERIAL1, SERIAL2, SERIAL3,
  SUB_PRODUCT1, SUB_PRODUCT2, SUB_PRODUCT3,
  SUB_SERIAL1, SUB_SERIAL2, SUB_SERIAL3,
  YYY1, YYY2...
两个表的PK都是SERIAL1,SERIAL2,SERIAL3,SUB_SERIAL1,SUB_SERIAL2,SUB_SERIAL3目的:想从table_a中检索出与table_b中SUB_SERIAL1,2,3值相同的数据,
并且用table_b的PRODUCT1,2,3, SERIAL_1,2,3字段去更新对应的table_a表的SUB_PRODUCT1,2,3, SUB_SERIAL_1,2,3字段。
但是如果有SERIAL,SUB_SERIAL1,2,3冲突时,需要删除table_a中冲突的那条记录,再更新。
因为数据量很大,并且循环操作,所以性能方面也需要考虑。
是不是用游标能实现?SQL学得不精,请大家多指教。

解决方案 »

  1.   

    数据sample:X:PRODUCT1,2,3和SERIAL1, 2, 3
    A or B or C:SUB_PRODUCT1,2,3和SUB_SERIAL1, 2, 3
    table_a
    X-A
    X-Ctable_b
    B-A
    C-B执行后:
    table_a
    X-C
    C-B
    B-A
      

  2.   

    第1次loop后
    table_a
    X-B (update)
    X-C
    B-A (insert)table_b
    B-A
    C-B
    第2次loop后,这时候用table_b的C-B去更新table_a的X-B,
    会更新为X-C,这就和原来那条X-C冲突了。目的就是想把原来那条删除后再更新。
    table_a
    X-B
    X-C
    B-A
    table_b
    B-A
    C-B
      

  3.   

    规则是用b表的每条数据的'-'后半部分,B-A中的A,与a表后半部分相同时,用b表的前半部去更新a表对应数据的后半部分。
    第一次loop时,也就是用B-A的B,去更新X-A的A,变为X-B。再把b表的B-A,插入a表。
    第2次loop时,b表的C-B,匹配上了a表的X-B,这时候应该更新为X-C,但是a表中原来已经有X-C了,就冲突了,
    需要先删掉原来得X-C,再更新。并把C-B,插入a表。
    后面同样的循环,直到b表的数据遍历结束。