0

次のフィールドを持つテーブルがあります。

domainname | domian_name_cert_no | keyvalue

domian_name_cert_noユニークで、カウンターで終わります。1、2、3など。2つ以上がdomian_name_cert_no共有している可能性がありkeyvalueます。これらのケースをリストする必要があります。keyvalueしたがって、最初の出現をリストする次のステートメントがありますdomian_name_cert_no (つまり、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;

次のような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;

これらの正しい記述は、必要性についての私の説明に基づいていますか?次の2番目のステートメントで何をしたのかよくわかりません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;

2 番目のクエリについては、何をしようとしているのかわかりません。私の推測では、最初のクエリで特定したキー値を持つすべてのレコードを取得したいと考えています。最初のクエリを内部結合に挿入するだけです。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 に答える