Конференция "Базы" » Удаление повторов в SQL [D6, ACCESS]
 
  • Alex_C (17.11.11 08:56) [0]
    На сколько корректно такое удаление повторов:


     ADOCommand1.CommandText := 'DELETE P.* FROM SpotTable P WHERE EXISTS ' +
       '(SELECT * FROM SpotTable R WHERE P.DXCall = R.DXCall AND P.BandADIF = R.BandADIF AND P.Id < R.Id)';



    Почему спрашиваю: в инете нашел много разных вариантов, есть весьма сложные. Этот же очень простой, и работает корректно.
  • Кщд (17.11.11 09:35) [1]
    корректно, если SpotTable.ID - PK.
  • Alex_C (17.11.11 09:36) [2]

    > SpotTable.ID - PK.


    Да конечно.
    Tks!
  • Омлет © (17.11.11 09:48) [3]
    DELETE T1
    FROM SpotTable T1, SpotTable T1
    WHERE (T1.DXCall = T2.DXCall) AND (T1.BandADIF = T2.BandADIF) AND (T1.Id > T2.Id)

  • Омлет © (17.11.11 09:50) [4]
    > FROM SpotTable T1, SpotTable T1

    fix:

    FROM SpotTable T1, SpotTable T2

  • Alex_C (17.11.11 09:58) [5]

    > DELETE T1
    > FROM SpotTable T1, SpotTable T1
    > WHERE (T1.DXCall = T2.DXCall) AND (T1.BandADIF = T2.BandADIF)
    > AND (T1.Id > T2.Id)


    Ошибка: необходимо указать таблицу, из которой происходит удаление.
  • Anatoly Podgoretsky © (17.11.11 11:16) [6]
    Не корректно!
    Их просто быть не должно, ни в каком случае
 
Конференция "Базы" » Удаление повторов в SQL [D6, ACCESS]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]