这是检查重复值的正确语句吗?

时间:2012-08-08 19:21:25

标签: mysql

我有一个包含以下字段的表:

domainname | domian_name_cert_no | keyvalue

domian_name_cert_no是唯一的,以计数器结束; 1,2,3等。有两个或更多domian_name_cert_no分享keyvalue的可能性。我需要列出这些案例。所以我有以下语句列出第一个keyvaluedomian_name_cert_no的出现次数(即,只有= 1。我不关心_2,_3中的重复项。)

select domainname, domian_name_cert_no, count(keyvalue), keyvalue 
from db.table 
where domian_name_cert_no like '%_1'
group by (keyvalue) 
having count(keyvalue)>1;

假设一个输出如下: xyx,xyx_1,10,777

然后,根据之前的输出我知道有10次出现,现在我需要详细列出这些共享keyvalue的域名,所以我使用了:

SELECT  a.*
FROM    db.table a
            INNER JOIN
            (
                SELECT keyvalue
                FROM db.table
                GROUP by keyvalue
                HAVING COUNT(keyvalue) = 10
            ) b 
                ON a.keyvalue = b.keyvalue;

这些正确的陈述是否基于我对需求的解释?我不太确定我在第二句话中做了什么:HAVING COUNT(keyvalue) = 10

MySQL专家,请告诉我这些陈述是否正确。

1 个答案:

答案 0 :(得分:0)

根据OP附加评论更改

您的第一个查询看起来不太正确。

select keyvalue, count(domian_name_cert_no) as rec_count 
from db.table 
where domian_name_cert_no like '%_1'
group by keyvalue 
having rec_count>1;

对于您的第二个查询,我不确定您在尝试什么。我最好的猜测是,您希望获得具有您在第一个查询中标识的键值的所有记录。只需将您的第一个查询插入内连接即可。您不需要HAVING声明。

  select a.*
  from 
    db.table a
  inner join
    (select keyvalue, count(domian_name_cert_no) as rec_count 
     from db.table
     where domian_name_cert_no like '%_1'
     group by keyvalue 
     having rec_count>1) b 
  on a.keyvalue = b.keyvalue;

希望我理解你的问题。