0

不知何故,我的数据库表根据名为 kdaccount 的字段复制了一堆值。

我想要做的是删除所有重复的kdaccounts,一个除外,我希望那个是最早提交的日期。

我写了一个查询来识别重复的帐户,但我现在确定如何构造 mysql 查询来删除它们。

$getVendors = mysql_query("SELECT vendor, nameid, kdaccount, MIN(dw_vendors.submitteddate) as `smallestDate` 
                                                FROM pr_po_main 
                                                LEFT JOIN dw_vendors ON pr_po_main.vendor = dw_vendors.kdaccount 
                                                WHERE dw_vendors.submitteddate <> '' GROUP BY vendor HAVING COUNT(dw_vendors.kdaccount) > '1'") or die("Get Vendors: " . mysql_error());
4

2 回答 2

1

希望以下解决方案对您有所帮助,

1.创建dw_vendors的重复表

创建表 dw_vendors_dup LIKE dw_vendors

2.使kdaccount唯一

ALTER TABLE dw_vendors_dup ADD UNIQUE (kdaccount);

3.将现有值插入到新表中,忽略重复项

INSERT IGNORE INTO dw_vendors_dup (vendor, nameid, kdaccount, submitteddate) 
SELECT vendor, nameid, kdaccount, submitteddate FROM dw_vendors
ORDER BY submitteddate

4.删除旧表dw_vendors并将重复的表重命名为dw_vendors

于 2013-08-02T16:42:43.610 回答
0

这里发布了一个关于如何在 Sql Fiddle 上实现的示例

链接链接

那应该向您展示事物的原理

以防万一这里是代码

DELETE Test 
FROM Test 
LEFT OUTER JOIN (SELECT MIN(comp) AS compMin, groupval
                FROM Test
                GROUP BY groupval) AS Test2 
ON Test.groupval = Test2.groupval AND Test.comp <> Test2.compmin
WHERE Test2.groupval IS NOT NULL 

表定义如下

CREATE TABLE Test 
    (
        comp int, 
        groupval int 
    );

编辑:这应该可以在没有have子句的情况下工作

于 2013-08-02T16:53:03.887 回答