如何使用 group by [重复] 使用 mySQL 删除数据库中的记录
Posted
技术标签:
【中文标题】如何使用 group by [重复] 使用 mySQL 删除数据库中的记录【英文标题】:How to delete records in DB with mySQL using group by [duplicate] 【发布时间】:2011-10-09 12:08:13 【问题描述】:可能重复:SQL Delete: can't specify target table for update in FROM clause
我只有一张表(将此表称为 TAB),代表大学考试。我有以下属性:CourseName、CourseCode 和 year。我想删除所有基数小于 100 的课程。如果我输入
select CourseName from TAB group by CourseName having count(CourseName) < 100;
我有一个确切的结果。但是,如果我想删除这些条目,我会尝试使用
delete from TAB where CourseName not in (select CourseName from TAB group by CourseName having count(CourseName) > 100);
但是系统返回错误:
错误代码:1093 您不能在 FROM 子句中指定目标表 'TAB' 进行更新
我必须如何删除这些记录?
【问题讨论】:
【参考方案1】:也许这可行?
DELETE FROM tab AS a
INNER JOIN (select CourseName from TAB group by CourseName having count(Coursename)>100) as b
ON a.CourseName = b.coursename
【讨论】:
【参考方案2】: $result=mysql_query("select CourseName from TAB group by CourseName having count(CourseName) < 100");
while($row=mysql_fetch_array($result))
mysql_query("delete from tab where courses='$row[0]'");
【讨论】:
单独删除结果会在 SQL Server 端使用更多带宽和处理能力。它需要下载 Web 服务器不需要的可能数十万行的列表,然后执行十万条额外的 SQL 语句。【参考方案3】:最简单的方法之一是从您的第一个查询创建一个临时表,然后在第二个语句中删除临时表中不存在的所有课程。
【讨论】:
好的,如何创建临时表?【参考方案4】:请在以下链接中查看答案。它将解决您的问题:
MySQL Error 1093 - Can't specify target table for update in FROM clause基本上,您不能从 SELECT 中使用的同一个表中删除(修改)。该页面记录了一些解决方法。
通过将嵌套的select
设为临时表,以下操作将起作用。
delete from TAB
where CourseName not in (select temp.CourseName
from (select t.CourseName
from TAB t
group by t.CourseName
having count(t.CourseName) > 100
) as temp
)
【讨论】:
以上是关于如何使用 group by [重复] 使用 mySQL 删除数据库中的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在laravel中将Group By与Join表一起使用[重复]
如何在linq C#中使用group by并获取记录列表[重复]
使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]