如何使用此查询从数据库中删除多个ListID

时间:2019-06-21 18:12:19

标签: php mysql

我希望从数据库中删除所有重复的清单,我已经上网搜索了一个简单的查询,但是不确定如何将其实现到自己的代码中

DELETE e.*
FROM employee e
WHERE id IN (SELECT id
             FROM 
                 (SELECT MIN(id) as id
                  FROM employee e2
                  GROUP BY first_name, last_name
                  HAVING COUNT(*) > 1) x);

我希望运行以上查询,剥离所有找到的具有相同listID的行 我该如何对以上查询进行编码?

我不明白e。*和雇员e代表什么

我的表称为列表。

我希望查询使用上面的内容,但是要删除所有listID =?

我可以使用

DELETE *
FROM listings
WHERE listID IN (SELECT listID
                 FROM 
                     (SELECT MIN(listID) AS listID
                      FROM listings
                      HAVING COUNT(*) > 1) x);

1 个答案:

答案 0 :(得分:0)

您最后要做的就是在不完全知道要删除的内容的情况下运行删除!

因此,第一步是制作确定将要删除的零件的零件:

SELECT MIN(id) AS lowestid 
FROM listings
GROUP BY listid
HAVING COUNT(Listid) > 1

给出以下数据,

ID   ListID
 1    100
 2    110
 3    100
 4    120
 5    110

它将按列表ID对它们进行分组,因此第一个分组在100上。该分组具有两个ID 1和3。因此,由于ID的数量> 1,因此它满足了“ having”子句。 id,1,作为第一行。

接下来,它将分组为110。它将找到两个记录。这样就满足了“具有”要求,并选择2作为下一行。

接下来它将分组为120。它仅找到一条记录。这没有通过“具有”测试,因此不包括在结果中。

因此,此查询的结果为[1,2]

(除非您包括排序依据,否则不能保证排序顺序;但这在这里不需要)

您可以并且应该运行/修改此查询,直到您完全确定要获得所需的结果为止。

只有删除这个词才起作用!

您现在要做的就是用括号将查询括起来,并将其合并到删除查询的位置。

这里提示“删除自”应该是您最后输入的内容。想象一下在错误的时间按下Enter键:

Delete from listings <enter>

当您在何处键入...时,您意识到您只是删除了整个内容!

我总是键入select *,然后当我看到结果正确时,返回并替换为“删除”

Delete
From listings 
Where id in(    
    SELECT MIN(id) AS lowestid 
    FROM listings
    GROUP BY listid
    HAVING COUNT(Listid) > 1
)