我正在尝试执行以下语句:
DELETE a
FROM db.table1 a
INNER JOIN (SELECT domainname
FROM db.table1
WHERE domainname LIKE '%.uci.edu'
GROUP BY keyvalue
HAVING COUNT(1) > 1
) b ON a.id = b.id
我得到了标题中提到的错误。我想要达到的目标已在此处进行了解释:如何使一个查询的结果出现在 NOT IN 子句中?
请帮我完成这项任务。为什么 b.id 未知?我没有这种类型的加入经验。我理解加入两个不同的表格,但是对于这个声明,有人可以解释一下吗?请注意,这domainname
是唯一的价值。主键是 theid
并且它是 auto_increment 但我不使用它来区分列。我主要使用另一个domainname_no
独特的值。
编辑:上面的命令不起作用。
我需要的是以下内容:我有一个域名列表。说:aa.yahoo.com、bb.yahoo.com、cc.yahoo.com、aa.msn.com。每个域名都有一个键值。如果密钥是共享的,我想删除这条记录。因此,我选择了按键值分组的不同值。如果记录不在不同的集合中,并且具有相同的顶级域,那么我不需要它。
示例:我的表:cert_id | 域名 | 域证书 | 键 1 | a.yahoo.com | a.yahoo.com_1 |5555 2 | a.yahoo.com | a.yahoo.com_2 |6666 3 | b.yahoo.com | b.yahoo.com_1 |5555 4 | b.yahoo.com | c.yahoo.com_2 |6666
每个域可能有多个与密钥关联的证书。如果一个或多个不同域名的证书具有相同的密钥,我想删除它。
现在,我有两个域名,它们a.yahoo.com
具有b.yahoo.com
相同的密钥。我需要删除b.yahoo.com
任何具有相同模式的域名,如“%.yahoo.com”,但不等于a.yahoo.com
不同的值。
目前,我正在做的是查询不同的值:
select distinct domainname
from db.table1
where domainname like '%.uci.edu'
group by keyvalue
order by domainname
然后删除任何不在不同列表中且具有相同模式的值%.yahoo.com
delete from db.table1 where domain not in ( I type the list of distinct domain
names manually)
and domainanme like '%.yahoo.com';
我希望问题现在很清楚。
但是这个命令不起作用。详情见:如何使一个查询的结果在 NOT IN 子句中?