#mysql
#mysql
Вопрос:
Итак, у меня есть таблица, в которой хранится URL-адрес в столбце. Из-за того, что URL анализируется и записывается по-разному, в таблице есть дубликаты. Как я могу выбрать все строки с одинаковым доменом и путем URL?
Я могу выбрать дубликаты, где URL-адрес точно совпадает, но это не то, что я хочу.
Примеры,
# This is a duplicate
https://www.example.com/example1
https://example.com/example1
# Not a duplicate
https://example.com/example2
https://example.com/example3
# This is a duplicate
https://example.com/example2/
https://example.com/example2
Комментарии:
1. Итак, ваш вопрос можно перефразировать как «как я могу удалить конечные косые черты и ‘www.’ из строки», верно?
2. Не совсем так. Я хочу удалить дублирующиеся строки, используя список идентификаторов, возвращенных из запроса, с которым я обращаюсь за помощью. Рассматриваемая таблица содержит 5 миллионов строк.
3. Да, вы уже сказали, что можете выбирать дубликаты. Вам не нужно обновлять записи, чтобы удалить определенные части строки. Достаточно выбрать определенным образом. Итак, вопрос можно перефразировать, как я уже сказал, нет?
4. Я могу выбирать точные дубликаты, я ожидаю, что запрос найдет URL-адреса, которые по существу имеют одинаковое назначение, хотя для другого URL-адреса потребуется замена, поэтому вы можете утверждать, что да, а затем выбрать с замененной строкой.
5. Может ли сопоставление с шаблоном разрешить это? dev.mysql.com/doc/refman/8.0/en/pattern-matching.html
Ответ №1:
Вы можете удалить повторяющееся значение, используя это.
DELETE t1 FROM urls t1
INNER JOIN urls t2
WHERE
t1.id != t2.id AND
t1.url = TRIM(TRAILING '/' FROM REPLACE(t2.url, '://www.', '://'));
Это пример URL: https://dbfiddle.uk/?rdbms=mysql_8.0amp;fiddle=792b0a7870b1abdd91f13cd4c608ab6a
Комментарии:
1. Если это так, вы можете использовать это
select * FROM urls t1 INNER JOIN urls t2 WHERE t1.id != t2.id AND t1.create_at >= t2.create_at AND t1.url = TRIM(TRAILING '/' FROM REPLACE(t2.url, '://www.', '://'));
2. Смотрите мой комментарий к другому ответу, я не думаю, что объединение — это то, что мне нужно для этого, задействована только одна таблица.