2015-06-19 103 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的這個操作就觸發表現相當快。

相關問題