2016-03-11 2 views
0

Я хочу вытащить двойные записи по первым совпадающим четырем символам слева или в первых строках в MySQL. как сделать SELECT?Mysql найти дубликаты на первых совпадающих символах

id name 
1 1111q 
2 1111 
3 1111asdfgg 
4 2222 
5 2222ag 
6 1111au 
7 3333 
8 5555 

Что-то вроде:

id name 
2 1111 
1 1111q 
6 1111au 
3 1111asdfgg 
4 2222 
5 2222ag 

ответ

0
select distinct t.* 
from the_table t 
    inner join the_table t2 ON left(t.name,4)=left(t2.name,4) and t.id<>t2.id 

Присоединяйтесь к той же таблице, ЛЕВЫЙ 4 символов и исключить тот же идентификатор

0

Удалить мой первоначальный ответ, неправильно вопрос.

Что вы можете сделать, это добавить еще один индексный столбец с первыми 4 символами из строки. Вероятно, вы предварительно обработаете строки каким-либо другим языком. Таким образом, вы можете иметь рабочий индекс. Присоединив одну и ту же таблицу к вычислению с подзапросом и объединением. Затем вы можете сравнить подсчеты. Еще лучше было бы, если вы можете добавить какой-то оператор сравнения в подзапрос для поиска только определенных префиксов.

Решение, использующее левый, неплохое, но оно теряет силу индекса при использовании функции вокруг поля при сравнении.

Вот рабочий пример из моего решения. Вы можете просмотреть план выполнения снизу.

http://sqlfiddle.com/#!9/1d9cc/19

Смежные вопросы