Mysql GROUP BY有条件

时间:2014-04-11 08:25:06

标签: mysql vb.net

我有一个包含这些列的表(indx,data_lname,data_fname,data_mname,data_dob,data_mobile) 我想分开独特和重复。

这是我的代码:

SELECT data_lname, data_fname, data_mname, data_dob, data_mobile
    FROM tbl_data
    GROUP BY data_lname, data_fname, data_mname, data_dob, data_mobile
    HAVING COUNT(indx) = 1
    ORDER BY indx;

SELECT data_lname, data_fname, data_mname, data_dob, data_mobile
    FROM tbl_data
    GROUP BY data_lname, data_fname, data_mname, data_dob, data_mobile
    HAVING COUNT(indx) > 1
    ORDER BY indx;

问题是,记录被标记为重复有两个标准,第一个是,它必须具有相同的名称和相同的dob,无论移动设备是什么。 第二个标准是它具有相同的名称和相同的移动设备,无论DOB是什么。

我将如何为此构建查询? TIA

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN来实现这一目标。

SELECT
  data.id,
  COUNT(duplicates.id) AS duplicates
FROM tbl_data AS data
LEFT JOIN tbl_data AS duplicates
  ON duplicates.data_lname = data.data_lname
  AND duplicates.data_fname = data.data_fname
  AND duplicates.data_mname = data.data_mname
  AND (duplicates.data_dob = data.data_dob OR duplicates.data_mobile = data.data_mobile)
  AND data.id != duplicates.id
GROUP BY data.id
HAVING duplicates > 0 #duplicates
HAVING duplicates = 0 #uniques

使用不同的HAVING子句获取所需的条目。