0

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

domainname | domian_name_cert_no | keyvalue

是独一无二的domian_name_cert_no,它以计数器结尾;1,2,3 等。有两个或更多domian_name_cert_no共享的可能性keyvalue。我需要列出这些案例。所以我有以下语句来列出第keyvalue一个中的出现domian_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 专家向我确认这些陈述是否正确。

4

1 回答 1

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;

希望我理解你的问题。

于 2012-08-08T19:53:26.953 回答