2016-10-11 4 views
0

一致する基準の次のようにしてテーブルのすべての重複値を取得するとします: - (first_name、last_name、father_name) 2-(nationalId)でマッチしました。 3-(phone_number)でマッチしました。Mysql複数の列でグループ化し、どのグループに一致するかに基づいてフラグ値を選択する方法

上記の条件を使用して自己が複数登録されているすべてのユーザーを取得したいとします。 今、私はそれらのいずれかを持っているmatched_type23値が一致したものに基づいてこれらのいずれかを持つ列を選択する必要がある他の列に沿って、これらの重複レコードを取得したい。 これで、一致する条件ごとに個別のクエリが作成されました。これは1つのクエリで実行できますか?

私はこれらのクエリがあります。

SELECT u.first_name,u.last_name,u.father_name,u.national_id,u.phone,COUNT(u.id) AS total,'1' AS match_type 
FROM users 
GROUP BY CONCAT(u.first_name,u.last_name,u.father_name) 
HAVING total > 1 

及び第二の一致基準について:

SELECT u.first_name,u.last_name,u.father_name,u.national_id,u.phone,COUNT(u.id) AS total, '2' AS match_type 
FROM users 
GROUP BY u.national_id 
HAVING total > 1 

、最後の1のため:

SELECT u.first_name,u.last_name,u.father_name,u.national_id,u.phone,COUNT(u.id) AS total, '3' AS match_type 
FROM users 
GROUP BY u.phone 
HAVING total > 1 

をし、私はこのようにあります。

SELECT src.* FROM (first_query UNION ALL second_query UNION ALL third_query) 
+0

クエリとデータを含めてください。今のところ、この質問は他の誰にとってもあまり役に立ちません。 –

+0

テーブル構造も追加できますか? – MontyPython

答えて

0

Plsの確認はこれでいいですか?

SELECT first_name,last_name, father_name, nationalId, phone_number ,CASE 
WHEN first_name=[Value] AND last_name=[Value] AND father_name = [VALUE] THEN 1 
    WHEN nationalId=[VALUE] THEN 2 
    WHEN phone_number=[VALUE] THEN 3 
    ELSE 0 END as matched_type FROM [TABLE_NAME] WHERE 
(first_name=[Value] AND last_name=[Value] AND father_name = [VALUE]) 
OR nationalId=[VALUE] OR phone_number=[VALUE] 
+0

しかし、私はすべての重複を取ることはできません、特定の値ではありません。 – jones

+0

あなたはこれについて私は考えているのだと思います。 –

+0

私はこれを言っています。私はすでに 'UNION'と一緒に使っています – jones

関連する問題