将记录标记为mySQL中的重复项

时间:2014-05-19 17:59:53

标签: mysql

我不是数据库人员,但我已经获得了清理别人数据库的“乐趣”工作。我们的数据库中有许多重复记录,一些客户每个月都会收到双倍或三倍的费用。

给出以下数据库示例 :

Table:  Customers

ID       Name        Phone          DoNotBill
1        Acme Inc    5125551212     No
2        ABC LLC     7138221661     No
3        Big Inc     4132229807     No
4        Acme        5125551212     No
5        Tree Top    2127657654     No

是否可以编写标识所有重复电话号码的查询(在本例中为记录1和4),然后通过更新DoNotBill列来标记和复制记录。但是没有标记第一条记录。

在这个例子中,我们将留下:

ID       Name        Phone          DoNotBill
1        Acme Inc    5125551212     No
2        ABC LLC     7138221661     No
3        Big Inc     4132229807     No
4        Acme        5125551212     Yes
5        Tree Top    2127657654     No

4 个答案:

答案 0 :(得分:1)

首先,我假设DoNotBill列只有两个可能的值;是的,不。在这种情况下,它应该是bool而不是varchar,这意味着它将是true或false。

此外,我没有得到DoNotBill列的含义。你为什么不用这样的东西?

select distinct phone from customers

SQL SELECT DISTINCT

这样可以为您提供不重复的电话号码,而无需额外的列。

答案 1 :(得分:1)

这样的事情?

UPDATE 
    customers cust, 
    (SELECT 
        c1.ID, 
        c1.name, 
        c1.phone, 
        c1.DoNotBill
    FROM customers c
    LEFT JOIN 
        (SELECT 
            cc.ID 
        FROM customers cc
        ) as c1 on c1.phone = c.phone
    ) dup
SET cust.DoNotBill = 'Yes' WHERE cust.id=dup.id ;

答案 2 :(得分:0)

这取决于您的数据量 你可以分步完成并使用像excel这样的工具......

这个qrt

SELECT a.id,b.id,a.phone FROM clients a , clients b WHERE
A.phone =b.phone 
And a.id!=b.id

结果是所有重复的记录。 添加

Group by a.phone

你将获得每2个重复的1条记录。 如果您喜欢这些记录,那么它们就是您所需要的。 ChNge选择选择a.id和 使用此qry作为更新sql语句的子项

UPDATE clients SET billing='no' WHERE id IN (  sql goes here)

答案 3 :(得分:-1)

UPDATE customers c SET c.DoNotBill="Yes";

UPDATE customers c
JOIN (
    SELECT MIN( ID ) ID, Phone
    FROM customers
    GROUP BY Phone
) u ON c.ID = u.ID AND c.Phone = u.Phone
SET c.DoNotBill="No";

这样不仅可以消除重复,而且还会处理所有多个条目。