SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.02.2019 20:09:31

ghostj666
Участник
Зарегистрирован: 22.02.2019
Сообщений: 4

Проблема с базой, нужно отфильровать ID, help

Всем привет! Возникла небольшая проблема с базой sql, по ошибке ввели неверные данные, нужно их отфильтровать и удалить неверные значения, но есть ли такая функция в SQL не имею понятий, суть проблемы:
Есть два столбца в таблице
ID ID_USING
1  100010000
ID отвечает за клиента, USING за использования, при покупки либо заказа пользователь добавляет в список к айди код использования (ID_USING) и идет отсчет 10001001, 10001002 и т.д. , за первой цифрой в ID_USING закреплен определенный юзер, ID от 1 до 9, в зависимости от юзера меняется и начала кода, а теперь к проблеме, идиоты на работе перепутали айди и ввели в базу кучу неверных айди например как:
ID ID_USING
2  100010000
Тут введен айди от первого, и теперь нужно удалить такие значения, вручную удалять нереально,  т.к в базе около 500к записей
Как можно сделать так чтобы при запросе удалять сразу по фильтру то есть

ЕСЛИ ЗНАЧЕНИЕ ID = ЗНАЧЕНИЕ ЛЮБАЯ ПЕРВАЯ ЦИФРА+ID_USING(тут в случае если айди однозначный то нужно добавить три нуля, если двухзначный то два, если трёхзначный то 1, если четырехзначный то не добавлять+ЛЮБЫЕ 4 ЦИФРЫ

Это вообще реально?) Заранее спасибо за советы)

Неактивен

 

#2 23.02.2019 00:26:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Проблема с базой, нужно отфильровать ID, help

substr(id_using, 1, length(id)) вырезает первые символы из id_using по количеству знаков в id

соответственно, чтобы выбрать только те записи, где начало id_using совпадает со значением id

select * from `таблица` where id = substr(id_using, 1, length(id));


удалить ненужные записи:
delete from `таблица` where id <> substr(id_using, 1, length(id));

Неактивен

 

#3 25.02.2019 17:52:50

ghostj666
Участник
Зарегистрирован: 22.02.2019
Сообщений: 4

Re: Проблема с базой, нужно отфильровать ID, help

vasya написал:

substr(id_using, 1, length(id)) вырезает первые символы из id_using по количеству знаков в id

соответственно, чтобы выбрать только те записи, где начало id_using совпадает со значением id

select * from `таблица` where id = substr(id_using, 1, length(id));


удалить ненужные записи:
delete from `таблица` where id <> substr(id_using, 1, length(id));

Добрый день, при выполнении данного запроса на select, выводят и верные строки, к примеру:
select * from `table1` where id <> substr(id_using, 1, length(id))
id  id_using
26 200260831
А нужно чтобы он игнорировал и не выводит строки которые содержат 0026 а так же первое число т.е. в вышеуказанном случае это <2><0026><0831>
Строка id_using состоит из код клиента(1 цифра) - айди поставщика(от 1 до 9999 - 4 цифры) - количество покупок(от 1 до 9999)
Что можно попробовать в таком варианте? Заранее спасибо

Отредактированно ghostj666 (25.02.2019 17:53:42)

Неактивен

 

#4 25.02.2019 20:14:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Проблема с базой, нужно отфильровать ID, help

ага, т.е. в колонке id содержится айди поставщика? и нужно проверять, чтобы id дополненный слева нулями до 4-ёх знаков совпадал с подстрокой id_using со второго по 5-ый символ?
Тогда ненужные записи:

select * from `таблица` where substr(concat('000', id),-4,4) <> substr(id_using,2,4);

Неактивен

 

#5 26.02.2019 12:42:47

ghostj666
Участник
Зарегистрирован: 22.02.2019
Сообщений: 4

Re: Проблема с базой, нужно отфильровать ID, help

vasya написал:

ага, т.е. в колонке id содержится айди поставщика? и нужно проверять, чтобы id дополненный слева нулями до 4-ёх знаков совпадал с подстрокой id_using со второго по 5-ый символ?
Тогда ненужные записи:

select * from `таблица` where substr(concat('000', id),-4,4) <> substr(id_using,2,4);

Это сработало! Спасибо огромнейшее, дай бог Вам здоровья, вышло аж 3 ляма неверных записей, не представляю сколько бы времени ушло если бы удалял вручную, предварительно сделав бэкап удалил лишние, спасибо!! smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson