2014-01-15 50 views
0

我在Python3中編寫了一個生成大量數據的程序,我想使用調用包含查詢來執行任務的存儲過程的python腳本將這些數據存儲在MySQL中。使用MySQL中的SP更新/標記重複條目

我有一個非常大的數據庫+/- 3.5磨。項,在此數據庫中有我理清使用此查詢的幾個副本:

SELECT oligoSequence FROM Oligos GROUP BY oligoSequence HAVING COUNT(oligoSequence) > 1; 

現在我得到了以下存儲過程:

DELIMITER // 
CREATE PROCEDURE sp_mark_duplicate_oligos() 
BEGIN 
SELECT oligoSequence FROM Oligos GROUP BY oligoSequence HAVING count(oligoSequence) > 1; 
END // 
DELIMITER ; 

至於我TABEL,我得到了一個TINYINT( isUniqueProbe),如果它是重複的,我想從0更改爲1。

CREATE TABLE Oligos 
( gene_id    varchar(30)  not null, 
oligoStartposition int    not null, 
oligoSequence  varchar(25)  not null, 
incubationTemp  decimal(5,2) not null, 
isUniqueProbe  tinyint(1), 
primary key(gene_id, oligoStartposition), 
foreign key(gene_id) references Genes(id) 
)ENGINE=INNODB; 

但我fairyly新的MySQL,而且我似乎無法得到更新語句在存儲過程中的工作,也許我一直盯着它太長,但如果有人能在一些線索這我將非常感激。

在此先感謝,埃裏克

回答

0

的Python似乎 不相關,對於這個問題,也不是事實,這是在一個存儲過程。

UPDATE Oligos o 
JOIN (SELECT oligoSequence 
     FROM Oligos 
     GROUP BY oligoSequence 
     HAVING COUNT(*) > 1) dups 
ON o.oligoSequence = dups.oligoSequence 
SET isUniqueProbe = 1 

您應該編制索引oligoSequence以提高效率。

+0

對不起,只是想提供足夠的信息。它的工作原理,謝謝分配!我只是想問,既然我也想明白這一點,那麼dups是什麼意思?只是一個變量,所以存儲的選擇? –

+0

這是子查詢的別名。在連接中使用的所有子查詢都需要有別名,並且在這種情況下還需要消除兩個「oligoSequence」列的歧義。 – Barmar