과 중복 고객을위한거야 Seaching :나는이처럼 보이는 테이블에서 중복 고객을 찾기 위해 노력 LIKE
customer_id | first_name | last_name
-------------------------------------
0 | Rich | Smith
1 | Paul | Jones
2 | Richard | Smith
3 | Jimmy | Roberts
을이 상황에서 나는 CUSTOMER_ID 0으로 돌아가 2 CUSTOMER_ID하는 쿼리가 필요합니다. 이 쿼리는 고객이 이름을 짧게했을 수도있는 곳, 리차드 대신 리치 (Rich) 또는 로버트 대신 롭 (Rob)을 검색해야합니다.
나는이 쿼리를 가지고 있지만 일치 항목 중 하나만 반환합니다 (둘 다 아님). 모두 Rich가 필요합니다. & 리처드가 쿼리에서 반환했습니다.
select distinct customers.customer_id, concat(customers.first_name,' ',customers.last_name) as name from customers
inner join customers dup on customers.last_name = dup.last_name
where (dup.first_name like concat('%', customers.first_name, '%')
and dup.customer_id <> customers.customer_id)
order by name
누군가 올바른 방향으로 나를 가리킬 수 있습니까?
select distinct customers.customer_id, concat(customers.first_name,' ',customers.last_name) as name
from customers
inner join customers dup on customers.last_name = dup.last_name
where ((dup.first_name like concat('%', customers.first_name, '%')
OR (customers.first_name like concat('%', dup.first_name, '%'))
)
and dup.customer_id <> customers.customer_id)
order by name
위의 솔루션은 성능 문제가있을 수 있습니다 :
당 @tsOverflow이 내 문제를 해결 최종 쿼리입니다.
어떻게 MySQL이 'Richard'라는 이름을 'Rich'라는 이름으로 줄 이길 기대하십니까? –
문제를 해결하려면 보조 정보가 필요합니다. 정보를 입력하는 사람에 따라 'Mike'= 'Mike'또는 'Mike'= 'Michael'과 'Jo'= 'Joseph'그리고 'Jo'= 'Joann'같은 메모를 얻을 수 있습니다. '리치 스미스'='리처드 스미스'? – Karlson