首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于检验一大组标识符的有效性

关于检验一大组标识符的有效性
EN

Database Administration用户
提问于 2015-11-21 20:21:59
回答 1查看 32关注 0票数 0

在我工作的研究组中,我们必须每天解决以下问题--数百次,甚至数千次:给出一组假定的基因名称(通常是几百个),标记那些不在我们(MySQL)数据库中的基因名称。我们的各种应用程序和脚本以多种方式解决了这个问题。我想优化这个过程。

当然,最简单的方法是迭代基因名称列表(当然,在删除任何重复的基因名称之后),对于每个基因名称,执行如下的操作

代码语言:javascript
复制
SELECT count(*) FROM gene WHERE genename = 'GENENAME-XYZ';

代码语言:javascript
复制
SELECT * FROM gene WHERE genename = 'GENENAME-XYZ';

并检测搜索失败的情况。

这意味着对数百个,通常是数千个基因执行这样的查询。

(顺便说一句,大多数查询通常是通过使用Python、R、Perl、MATLAB等语言的DBI工具编写的脚本来执行的。)

或者,您可以捏造表单的(通常是巨大的) SQL语句。

代码语言:javascript
复制
SELECT DISTINCT genename FROM gene \
    WHERE genename IN ('GENENAME-001', 'GENENAME-002', ..., 'GENENAME-789');

...and从结果推导出无效基因名的子集。

也许只有我一个人,但我从如此庞大的SQL语句中获得了一些强大的代码气味

总之,我没有一个完全令人满意的解决方案,但由于问题必须非常常见,我认为必须有标准的解决方案。如果这是正确的,请让我知道他们是什么。

顺便说一句,假设对DB的访问是只读的.特别是,请排除任何涉及创建临时表的解决方案。

此外,如果有关系,我们的数据库是MySQL数据库。

EN

回答 1

Database Administration用户

发布于 2015-12-02 22:19:27

在表x中输入名称。

所有“新名字”的清单:

代码语言:javascript
复制
SELECT x.name
    FROM x
    LEFT JOIN gene  ON x.name = gene.name
        WHERE gene.name IS NULL;

gene应该在name上有一个索引。

我不认为只用一个IN就能做到这一点。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/121776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档