错误代码:1054:未知列

时间:2012-08-06 15:45:43

标签: mysql

我正在尝试执行以下语句:

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.comb.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?

2 个答案:

答案 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