Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет! Возникла небольшая проблема с базой 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 ЦИФРЫ
Это вообще реально?) Заранее спасибо за советы)
Неактивен
substr(id_using, 1, length(id)) вырезает первые символы из id_using по количеству знаков в id
соответственно, чтобы выбрать только те записи, где начало id_using совпадает со значением id
Неактивен
vasya написал:
substr(id_using, 1, length(id)) вырезает первые символы из id_using по количеству знаков в id
соответственно, чтобы выбрать только те записи, где начало id_using совпадает со значением idselect * 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)
Неактивен
ага, т.е. в колонке id содержится айди поставщика? и нужно проверять, чтобы id дополненный слева нулями до 4-ёх знаков совпадал с подстрокой id_using со второго по 5-ый символ?
Тогда ненужные записи:
Неактивен
vasya написал:
ага, т.е. в колонке id содержится айди поставщика? и нужно проверять, чтобы id дополненный слева нулями до 4-ёх знаков совпадал с подстрокой id_using со второго по 5-ый символ?
Тогда ненужные записи:select * from `таблица` where substr(concat('000', id),-4,4) <> substr(id_using,2,4);
Это сработало! Спасибо огромнейшее, дай бог Вам здоровья, вышло аж 3 ляма неверных записей, не представляю сколько бы времени ушло если бы удалял вручную, предварительно сделав бэкап удалил лишние, спасибо!!
Неактивен