2016-10-11 66 views
0

假设我想通过遵循匹配的条件获取表的所有重复值: 1-匹配(first_name,last_name,father_name)。 2匹配(nationalId)。 3匹配(phone_number)。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

请检查是否可以吗?

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

相关问题