0

我想删除不是来自特定值集的值。我事先不知道这些值。我可以通过查询这些值来了解它们,并且我想一步完成这个过程。我做了以下声明:

delete from db.table1 where domain not in 
(
select distinct domainname 
from db.table1
where domainname like '%.uci.edu'
group by keyvalue
order by domainname
) 
and domainanme like '%.uci.edu';

知道这domainname是一个唯一的字段,而主键table1auto_increment数字。

我需要做的是:我有一个域名列表。说:aa.yahoo.com、bb.yahoo.com、cc.yahoo.com、aa.msn.com。每个域名都有一个键值。如果密钥是共享的,我想删除这条记录。因此,我选择了按键值分组的不同值。如果记录不在不同的集合中,并且具有相同的顶级域,那么我不需要它。

我的查询可能是错误的。SQL给了我error: 1093: you can' specify target table table1 for update in FROM clause.

请以任何有效的方式帮助实现这一目的。我有一个很长的剪切顶级域名列表,我只需要具有不同键值的域名。如果有一个通用的解决方案可以做到这一点,而无需逐个处理每个域名(如我的示例),那就更好了。

编辑: domainname不是唯一字段。我使用另一个字段:domainnameNo作为唯一字段

4

1 回答 1

0

我认为这就是你要找的:

DELETE a
FROM db.table1 a
    INNER JOIN (SELECT id
                FROM db.table1
                WHERE domainname LIKE '%.uci.edu'
                GROUP BY keyvalue
                HAVING COUNT(1) > 1
        ) b
        ON a.id = b.id;
于 2012-08-06T13:22:06.413 回答