2014-01-15 52 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