2016-10-11 2 views
0

Предположим, что я хочу взять все повторяющиеся значения таблицы, выполнив следующие критерии: 1- Соответствует (first_name, last_name, father_name). 2- соответствует (nationalId). 3- соответствует (номер телефона).Mysql как группировать по нескольким столбцам и выбирать значение флага на основе сопоставленной группы

Предположим, я хочу, чтобы все пользователи, зарегистрировавшие их самостоятельно, использовали более одного, используя вышеуказанные условия. Теперь я хочу взять эти дубликаты записей, по другим столбцам мне нужно выбрать столбец matched_type, который должен иметь один из этих значений 1, 2, 3 на основе того, что соответствовало. Теперь у меня есть отдельный запрос для каждого подходящего критерия, можно ли это сделать одним запросом?

У меня есть эти запросы:

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 

и для последнего:

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

Смежные вопросы