根据mysql数据库中的列数删除某些行
我有一个非常大的数据库,在一个表中有大约1.2亿条记录。我首先清理了这个表中的数据,然后将其划分为几个表,可能会对其进行规范化。此表的列如下所示:idPrimary Key、userId、Url、Tag。这基本上是美味网站数据集的一个子集。正如我所说,每一行都有一个id、一个用户id、一个url和一个标记。例如,delicious网站中的书签由一个url的多个标记组成,这对应于我数据库中的几行。例如: 身份证件使用者网址;标签 38;12c2763095ec44e498f870ed67ee948d;;AJAX 39;12c2763095ec44e498f870ed67ee948d;;应用程序编程接口 40;12c2763095ec44e498f870ed67ee948d;;javascript 41;12c2763095ec44e498f870ed67ee948d;;图书馆 42;12c2763095ec44e498f870ed67ee948d;;轨道 如果我想查看每个不同url的标签数量,我会运行下面的查询 选择不同的url、标记、计数标记作为标记计数 从urltag 按url分组 现在我想删除与URL关联的标记少于5个的记录。 有人知道我必须运行的实际查询吗? 谢谢根据mysql数据库中的列数删除某些行,sql,database,mysql,Sql,Database,Mysql,我有一个非常大的数据库,在一个表中有大约1.2亿条记录。我首先清理了这个表中的数据,然后将其划分为几个表,可能会对其进行规范化。此表的列如下所示:idPrimary Key、userId、Url、Tag。这基本上是美味网站数据集的一个子集。正如我所说,每一行都有一个id、一个用户id、一个url和一个标记。例如,delicious网站中的书签由一个url的多个标记组成,这对应于我数据库中的几行。例如: 身份证件使用者网址;标签 38;12c2763095ec44e498f870ed67ee948
我应该这样做。但是您的请求没有特别考虑到几个不同的用户ID可能已经提交了相同的url…您不需要选择DISTICT url。。。当您按url分组时。 我会像这样重写您的查询: 从 到 在select子句中放置tag列不会提供有用的数据。如果GROUPBY子句中未提及某列,则为该列返回的值将是随机的,尤其是mintag 因此,如果您想删除包含URL的所有行,其中关联的标记少于5个,则可以执行以下操作: 您可以向表中添加标志,例如:
alter table urltag
add column todelete tinyint(4) not null default 0,
add key(todelete);
那你就可以了
update urltag u
inner join (
SELECT url, count(tag) tagcount
FROM urltag GROUP BY url
)big on big.url = t.url
set t.todelete = 1
where big.tagcount < 5;
当我运行这个查询时,我得到了一个错误:您不能在FROM clauseah中为update指定目标表'urltag',在这种情况下,您可能无法在mysql中执行此操作。不过,我认为sql女士可以处理这个案件。我想你唯一的选择是在两个查询中完成,然后获取counttag<5的不同URL,然后对这些URL进行删除查询。
SELECT url, COUNT(tag) as "TagCount" FROM urltag GROUP BY url
alter table urltag
add column todelete tinyint(4) not null default 0,
add key(todelete);
update urltag u
inner join (
SELECT url, count(tag) tagcount
FROM urltag GROUP BY url
)big on big.url = t.url
set t.todelete = 1
where big.tagcount < 5;
delete from urltag where todelete = 1;