我想删除不是来自特定值集的值。我事先并不知道这些价值观。我可以通过查询它们来了解这些值。我想一步完成这个过程。我做了以下声明:
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
是唯一字段,而table1
的主键是auto_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
作为唯一字段
答案 0 :(得分: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;