我正在尝试执行以下语句:
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
我收到了标题中提到的错误。我在这里解释了我想要实现的目标:How to make the result of one query be in the NOT IN clause?
请帮我完成这个任务。为什么b.id未知?我没有这种类型的加入经验。我理解加入两个不同的表格,但对于这个陈述,有人可以解释一下吗?请注意,domainname
是唯一值。主键是id
,它是auto_increment,但我不使用它来区分列。我主要使用另一个唯一的值domainname_no
。
编辑:上述命令不起作用。
我需要的是以下内容: 我有一个域名列表。说:aa.yahoo.com,bb.yahoo.com,cc.yahoo.com,aa.msn.com。每个域名都有一个键值。如果密钥是共享的,我想删除此记录。因此,我选择了按键值对它们进行分组的不同值。如果记录不在不同的集合中,并且具有相同的顶级域名,那么我不需要它。
示例:我的表: cert_id |域名| domain_certificate |键 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';
我希望现在问题很清楚。
但是这个命令不起作用。有关详细信息,请参阅:How to make the result of one query be in the NOT IN clause?
答案 0 :(得分:0)
您没有为ID
指定SubQuery
。试试这个:
DELETE a
FROM db.table1 a
INNER JOIN (SELECT id, domainname -- added ID field
FROM db.table1
WHERE domainname LIKE '%.uci.edu'
GROUP BY keyvalue
HAVING COUNT(1) > 1
) b ON a.id = b.id -- ID was used here
答案 1 :(得分:0)
您没有加入两个表,您的加入table1与查询结果,并且您没有在该查询中包含id列。在子查询的开头尝试SELECT id, domainname
。