と重複する顧客のためにSeaching:この状況でが、私はこのようになりますテーブル内の重複顧客を見つけようとしているLIKE
customer_id | first_name | last_name
-------------------------------------
0 | Rich | Smith
1 | Paul | Jones
2 | Richard | Smith
3 | Jimmy | Roberts
、私はCUSTOMER_ID 0とCUSTOMER_ID 2で返されたクエリを必要としています。このクエリでは、顧客が名前を短縮した可能性がある場所、リチャードの代わりにRich、ロバートの代わりにRobを検索する必要があります。
私はこのクエリを持っていますが、一致のうちの1つ(両方ではない)だけを返します。私は両方のリッチが必要です&リチャードはクエリによって返されました。
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
上記の溶液は、パフォーマンスの問題を有することができます。
MySQLが「リチャード」という名前を「リッチ」にするのはどうでしょうか? –
問題を解決するには2次情報が必要です。情報を入力した人によっては、マイク=マイク、マイク=マイケル、ジョー=ジョゼフジョー=ジョーン=とジョーン= 'リッチスミス' = 'リチャードスミス'? – Karlson