修改删除重复项的MySQL查询

时间:2011-06-10 15:54:57

标签: mysql sql

我的查询如下:

SELECT * FROM 
    (SELECT * FROM persons ORDER BY date DESC) AS p
GROUP BY first_name,last_name,work_phone 

如果您还没有弄明白,这会删除名称和工作电话号码重复的条目,只留下最新的条目。你应该知道的person表中有另一个字段,一个名为DELETED的二进制字段。

问题是,如果存在这种性质的重复,我不希望在其DELETED值为TRUE时考虑行,而不管其日期值的最近值。但是,如果一行没有重复,则无论它有多少DELETED值,它都应该包含在结果中。

如果存在重复项,则永远不会出现所有重复项都有DELETED = TRUE的情况,至少有一个不会被删除。

2 个答案:

答案 0 :(得分:2)

SELECT * FROM   
  (SELECT * FROM persons ORDER BY deleted ASC, date DESC) AS p
GROUP BY first_name,last_name,work_phone 

答案 1 :(得分:0)

以下是我理解问题的方法:

  1. 您的persons表格包含字段first_namelast_namework_phonedeleted以及其他一些字段。
  2. 任何具有相同名字和姓氏的记录以及工作电话都应视为重复记录。
  3. 应使用最近取消删除的副本,如果已全部删除,则只使用最新副本。
  4. 以下是我将如何解决问题的草图:

    1. 在子查询中选择不同的first_name,last_name和work_phone值。
    2. 将其连接到另一个子查询中每个组合的最新未删除记录。
    3. 左连接到第三个子查询中每个组合的最新记录。
    4. 使用coalesce从第二个或第三个子查询中提取值,取其为空值。