SQL удалить несколько критериев повторяющихся записей - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть таблица с повторяющимися записями во всех полях, кроме одного (col4 для примера). Мне просто нужно удалить дубликаты записей, где поле t1.col4 пустое.

ID  Col1   Col2   Col3   Col4
1   Joe     1      2      Yes
2   Sue     1      2      
3   Joe     2      3      
4   Joe     1      2      

Цель: удалить только ID 4

Я пробовал как внутреннее соединение (я не думаю, что msaccess позволяет это), так и методику WHERE EXISTS / IN с ошибками.

Метод Exists удаляет все записи, в которых t1.col4 равен нулю (а не только те, которые совпадают в подзапросе):

DELETE t1.*
  FROM t1
  WHERE Exists (
    SELECT t1.col1, t1.col2, t1.col3
      FROM t1
      Group by t1.col1, t1.col2, t1.col3
      HAVING Count(*) > 1
    )
    AND t1.col4 Is Null;

Я пробовал несколько итераций техники Inner Join, но все, что я здесь прочитал, говорит о том, что она не поддерживается в Access. Рад опубликовать то, что я пробовал, если это поможет. Я также пытался записать подзапрос в temptable, а затем пытался удалить записи, соответствующие внутреннему соединению.

1 Ответ

0 голосов
/ 26 апреля 2018

Вам нужен коррелированный подзапрос:

DELETE t1
  FROM t1
  WHERE EXISTS (SELECT t1.col1, t1.col2, t1.col3
                FROM t1 as tt1
                WHERE t1.col1 = tt1.col1 AND t1.col2 = tt1.col2 AND t1.col3 = tt1.col3 AND t1.id <> tt1.id
               ) AND
        t1.col4 Is Null;
...