+----+--------------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+--------------+-----+-----------+----------+
| 1 | Ramesh Olive | 32 | Ahmedabad | 2000.00 |
| 2 | Tan Kau | 25 | Delhi | 1500.00 |
| 3 | Jason Tan Kau| 25 | Delhi | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Hardik Jass | 27 | Bhopal | 4500.00 |
| 7 | Muffy John | 24 | Indore | 10000.00 |
| 8 | Muffy Lee | 24 | Indore | 10000.00 |
+----+--------------+-----+-----------+----------+
No exemplo acima, vamos dizer que o nome da tabela é "table_a" e 1) "Tan Kau" é duplicado com "Jason Tan Kau" e 2) "Hardik" é duplicado com "Hardik Jass"
Como escrever SQL que produzirá uma saída como abaixo?
Eu acho que isso vai funcionar, mas deve ser muito lento. Alguma ideia para melhorar isso?
Select A.*, IF(B.ID IS NULL, "", "DUP") as DUP
FROM table_a A
LEFT JOIN table_a B
ON A.NAME LIKE CONCATE("%", B.NAME, "%") AND A.ID != B.ID
+----+--------------+-----+-----------+----------+-----+
| ID | NAME | AGE | ADDRESS | SALARY | DUP |
+----+--------------+-----+-----------+----------+-----+
| 1 | Ramesh Olive | 32 | Ahmedabad | 2000.00 | |
| 2 | Tan Kau | 25 | Delhi | 1500.00 | Dup |
| 3 | Jason Tan Kau| 25 | Delhi | 2000.00 | Dup |
| 4 | Chaitali | 25 | Mumbai | 6500.00 | |
| 5 | Hardik | 27 | Bhopal | 8500.00 | Dup |
| 6 | Hardik Jass | 27 | Bhopal | 4500.00 | Dup |
| 7 | Muffy John | 24 | Indore | 10000.00 | |
| 8 | Muffy Lee | 24 | Indore | 10000.00 | |
+----+--------------+-----+-----------+----------+-----+
Sua consulta pode retornar os resultados esperados adicionando a condição inversa:
Não sei se será mais rápido, mas outra forma de fazer seria usar o INSTR:
SQL Fiddle
eu fiz algo um pouco diferente
NOTA: Eu basicamente plagiei a resposta de Leigh e a aumentei um pouco, então, por favor, não marque minha resposta como aceita !!!
A razão pela qual dei isso é para o caso de haver mais dups presentes
Aqui estão seus dados de amostra mais duas linhas extras:
Observe como minha consulta aumentada lida com os dups corretamente
Diante de mais dups, a consulta de Leigh faz o seguinte:
A resposta de @LeighRiffel só precisa ser incorporada em uma subconsulta e tornada DISTINTA:
No entanto, a resposta de Leigh forneceu os princípios SQL necessários antecipadamente.
Portanto, dou a ele um +1 !!!