2015-06-19 105 views
0

我在ADS中有一个可能包含重复记录的大型DBF表。重复记录由field2,field3,field5,field4,field8和field7与另一条记录匹配的任何记录标识。我需要识别重复记录并删除它们。为了实现这一点,我试图写一组记录到第二个表。即使重复记录由六个字段标识,我需要将整个记录(30个字段)写入第二个表格。我曾尝试以下代码:从Advantage数据库服务器10.1删除重复的行表

insert into table2 select * from table1 where (
    field2, field3, field5, field4, field8, field7 
) in (
    select field2, field3, field5, field4, field8, field7 
    from table1 where field3 not like '%FOO%' and field3 not like '%BOO%' 
    group by field2, field3, field5, field4, field8, field7 having count(*) > 1 
) 

ADS错误消息:ERROR IN SCRIPT:poQuery:错误7200:AQE错误:状态= 42000; NativeError = 2115; [iAnywhere解决方案] [Advantage SQL Engine]找不到预期的词法元素:)解析SELECT语句中的WHERE子句时出现问题。

任何和所有的帮助表示赞赏。

+0

哇。这甚至与任何方言中的正确SQL语法都差不多。 :-)你可以发布一些示例数据(根据你需要实际匹配的列)?另外,在尝试INSERT之前,只要能够选择行即可。当你得到这个工作时,*然后*弄清楚如何将它们插入到另一个表中。 –

回答

1

只要你已经拥有与列备用表,你要善于用...

insert into table2 
    (field2, field3, field5, field4, field8, field7) 
select 
     field2, field3, field5, field4, field8, field7 
    from 
     table1 
    where 
      field3 not like '%FOO%' 
     and field3 not like '%BOO%' 
    group by 
     field2, 
     field3, 
     field5, 
     field4, 
     field8, 
     field7 
    having 
     count(*) > 1 ) 
0

我认为最简单的答案是只删除所有重复的记录,同时保持刚第一。这里是我的意思是:

DECLARE tbl CURSOR; 

//1st find duplicate records 
OPEN tbl AS SELECT DISTINCT a.field1, a.field2, a.field3... 
       FROM (SELECT d1.field1, d1.field2, d1.field3... 
         FROM table1 d1 
        HAVING COUNT(*) > 1) a ; 

//now traverse cursor containing duplicate records 
//deleting all duplicates from original table except 
//1st one 

WHILE FETCH tbl DO 

    DELETE FROM table1 
    WHERE RowId > ( 
      SELECT MIN(d3.RowId) 
      FROM table1 d3 
      WHERE d3.field1 = tbl.field1 
       AND d3.field2 = tbl.field2 
       AND d3.field3 = tbl.field3 ...) 
     AND table1.field1 = tbl.field1 
     AND table1.field2 = tbl.field2 
     AND table1.field3 = tbl.field3 ; 

END WHILE ; 
CLOSE tbl ; 

如果table1的是在这些领域中有些索引(字段1,字段2,字段3 ...),而且并不复杂“关于删除”宣布table1的这个操作就触发表现相当快。

相关问题