2012-08-08 56 views
0

我有一個具有以下字段的表:這是否正確的語句來檢查重複值?

domainname | domian_name_cert_no | keyvalue 

domian_name_cert_no是獨特的,它有一個計數器結束; 1,2,3等。有可能兩個或多個domian_name_cert_no共享keyvalue。我需要列出這些案例。因此,我有以下陳述在第一個domian_name_cert_no中列出keyvalue的出現次數(即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專家請向我確認這些陳述是否正確。

回答

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; 

對於你的第二個查詢,我不確定你在嘗試什麼。我最好的猜測是你想獲得你在第一個查詢中識別出的關鍵值的所有記錄。只需將您的第一個查詢插入到內部聯接中。您將不需要0​​聲明。

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; 

希望我明白你的問題。

+0

是的。第二個查詢是列出具有該鍵值的所有記錄。例如,在第一個查詢中,如果我有10個記錄有一個特定的鍵值,這個查詢就會爲我列出它們。我會嘗試你的第一個查詢。 – 2012-08-08 20:06:40

+0

當我編輯第一條語句就像你所建議的那樣,我得到了0個結果,而不是這種情況。我會給你一個存儲值外觀的例子。這些專欄在我之前的文章中有說明。假設存儲的值如下:1)a.yahoo.com,a.yahoo.com_1,222,2)a.yahoo.com,a.yahoo.com_2,333,3)a.yahoo.com,a.yahoo。現在因爲我有'domian_name_cert_no'內容:a.msn.com_1與另一個'domian_name_cert_no'內容具有相同的'keyvalue':a.msn.com_1 a.msn.com,a.msn.com_1,222. – 2012-08-10 09:38:17

+0

.yahoo.com_1,這裏我需要計數器爲2來告訴我這個關鍵值發生了兩次。在第二個查詢中,我需要列出所有'domian_name_cert_no'內容以及共享某個'keyvalue'的corressponding'domainname',在我們的例子中爲222。 – 2012-08-10 09:39:23