Как удалить один из дубликатов на основе другого столбца? - PullRequest
0 голосов
/ 23 апреля 2020

Это продолжение заданного вопроса здесь

Допустим, у меня есть другой столбец с именем "primary" в схеме, представленной в приведенном выше вопросе, так что теперь он будет выглядеть что-то вроде этого:

Таблица камней:

stone_id = 412 upcharge_title = "sapphire" primary = 1
stone_id = 412 upcharge_title = "sapphire" primary = 0

Я хочу удалить строки, которые являются дубликатами в полях "stone_id" и "upcharge_title" и имеют значение в "primary" поле равно 0, но оставьте другую строку, значение первичного которой равно 1?

Как я могу сделать это с MySQL?

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Вы можете сделать это с помощью самостоятельного соединения:

delete t1
from tablename t1 inner join tablename t2
on t1.stone_id = t2.stone_id and t1.upcharge_title = t2.upcharge_title 
and t1.primary = 0 and t2.primary = 1 

См. Демоверсию .

0 голосов
/ 23 апреля 2020

вы можете использовать подход подзапроса

delete from tbl
where primary != 0 and (stone_id, upcharge_title) = (
  select stone_id, upcharge_title
  from tbl
  group by stone_id, upcharge_title
  having count(*) > 1
)
0 голосов
/ 23 апреля 2020

Один метод:

delete t
    from t join
         (select stone_id, upcharge_title, max(primary) as max_primary
          from t
          group by stone_id, upcharge_title
         ) tt
         using (stone_id, upcharge_title)
    where t.primary = 0 and tt.max_primary = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...