首页 > 解决方案 > 删除两列连接重复的行

问题描述

teh-1400行。

我想删除具有col1col2重复的行。

例如 - 如果col1isloremcol2isipsum
并且还有一些下一行 - col1isloremcol2isipsum
next行应该被删除。

这是我正在使用的代码,看不出有什么问题,因为最终结果是 - 只剩下一行,所有其他行都被删除。

该表至少有一半关于col1col2连接的唯一行。

$st = $db->query("select id, col1, col2 from teh");
$st->execute();
$arr = $st->fetchAll();
$check = [];
foreach($arr as $el){
    $str = $el['col1'] . $el['col2'];
    if(in_array($str, $check)){
        $sql = "delete from teh where id = :aid";
        $st = $db->prepare($sql);
        $st->execute([":aid" => $el['id']]);
    }
    else{
        array_push($check, $str);
    }
}

标签: phpmysql

解决方案


如果要删除具有较高id但相同col1col2值的行,您可以简单地使用较低值DELETE存在匹配行的行id

DELETE 
t1
FROM teh t1
JOIN teh t2 ON t2.col1 = t1.col1 AND t2.col2 = t1.col2 AND t2.id < t1.id

dbfiddle 上的演示


推荐阅读