2012-08-06 68 views
0

我試圖執行以下語句:錯誤代碼:1054:未知列

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這是不同值的域名。

目前,我在做什麼是quering不同值:

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?

+0

什麼是GROUP BY keyvalue應該做的?你能顯示'domainname'表的樣本數據嗎? – 2012-08-06 15:48:03

+0

keyvalue是一個數字,例如。 867676。如果發現兩個不同的域名重複,我想刪除重複的記錄。 – 2012-08-06 17:08:35

回答

0

您沒有爲SubQuery指定ID。試試這個:

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 
0

你沒有加入兩個表,你加入table1與查詢的結果,並且你沒有在該查詢中包括id列。在子查詢的開頭嘗試SELECT id, domainname

相關問題