次のようなテーブルで重複する顧客を見つけようとしています。
customer_id | first_name | last_name
-------------------------------------
0 | Rich | Smith
1 | Paul | Jones
2 | Richard | Smith
3 | Jimmy | Roberts
この状況では、customer_id 0 と customer_id 2 を返すクエリが必要です。このクエリでは、顧客が自分の名前を短縮した可能性がある一致を検索する必要があります。たとえば、Richard ではなく Rich、Robert ではなく Rob です。
私はこのクエリを持っていますが、一致の 1 つ (両方ではない) のみを返しています。クエリで返される Rich と Richard の両方が必要です。
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
誰かが私を正しい方向に向けることができますか?
@tsOverflow ごとに、これは私の問題を解決した最終的なクエリです:
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
上記のソリューションには、パフォーマンスの問題がある可能性があります。