我希望从数据库中删除所有重复的清单,我已经上网搜索了一个简单的查询,但是不确定如何将其实现到自己的代码中
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);
答案 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
)