Php 删除重复项但保留最早日期
不知何故,我的数据库表基于一个名为kdaccount的字段复制了一组值 我试图做的是删除所有重复的KDAccount,除了一个,我希望这一个是最早提交的日期 我编写了一个查询来识别重复的帐户,但现在我确定了如何构造mysql查询来删除它们Php 删除重复项但保留最早日期,php,mysql,Php,Mysql,不知何故,我的数据库表基于一个名为kdaccount的字段复制了一组值 我试图做的是删除所有重复的KDAccount,除了一个,我希望这一个是最早提交的日期 我编写了一个查询来识别重复的帐户,但现在我确定了如何构造mysql查询来删除它们 $getVendors = mysql_query("SELECT vendor, nameid, kdaccount, MIN(dw_vendors.submitteddate) as `smallestDate`
$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());
$getVendors=mysql\u查询(“选择vendor、nameid、kdaccount、MIN(dw\u vendors.submitteddate)作为'smallestDate`”
从pr_po_main
在pr_po_main.vendor=dw_vendors.kdaccount上左键加入dw_供应商
其中,dw_vendors.submitteddate“”按具有计数(dw_vendors.kdaccount)>“1”或死亡(“获取供应商:”.mysql_error())的供应商分组;
希望以下解决方案对您有所帮助
1.创建dw_供应商的重复表
创建类似dw_供应商的dw_供应商dup表
2.将KDA帐户设置为唯一
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_供应商
并将重复的一个重命名为dw_供应商这里发布了一个如何在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
Edit:如果没有having子句,这应该行得通。顺便说一句,您应该考虑使用PDO或MySQLi以及准备好的语句,因为mysql函数已经被弃用。您想从两个表中删除行还是只从一个表中删除行?
delete from table WHERE id IN()
用任何主键替换id,并首先在测试环境中进行测试。这是假设您的选择只返回副本,而不是原件!
CREATE TABLE Test
(
comp int,
groupval int
);