不知何故,我的数据库表基于一个名为kdaccount的字段重复了一堆值。
我尝试做的是删除除1之外的所有重复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());
答案 0 :(得分:1)
希望以下解决方案能为您提供帮助,
1.创建一个重复的dw_vendors表
CREATE TABLE 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
答案 1 :(得分: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
表格def遵循
CREATE TABLE Test
(
comp int,
groupval int
);
编辑:这应该没有条件btw