Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据mysql数据库中的列数删除某些行_Sql_Database_Mysql - Fatal编程技术网

根据mysql数据库中的列数删除某些行

根据mysql数据库中的列数删除某些行,sql,database,mysql,Sql,Database,Mysql,我有一个非常大的数据库,在一个表中有大约1.2亿条记录。我首先清理了这个表中的数据,然后将其划分为几个表,可能会对其进行规范化。此表的列如下所示:idPrimary Key、userId、Url、Tag。这基本上是美味网站数据集的一个子集。正如我所说,每一行都有一个id、一个用户id、一个url和一个标记。例如,delicious网站中的书签由一个url的多个标记组成,这对应于我数据库中的几行。例如: 身份证件使用者网址;标签 38;12c2763095ec44e498f870ed67ee948

我有一个非常大的数据库,在一个表中有大约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个的记录。 有人知道我必须运行的实际查询吗? 谢谢


我应该这样做。但是您的请求没有特别考虑到几个不同的用户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;