SELECT * FROM gene_info_mouse left join ipi_genes_mouse on gene_info_mouse.official_name = ipi_genes_mouse.official_name WHERE gene_info_mouse.official_name = 'vlcad' OR gene_info_mouse.gene_info_alias like '%|vlcad|%'
贴出你的explain SELECT * FROM gene_info_mouse left join ipi_genes_mouse on gene_info_mouse.official_name = ipi_genes_mouse.official_name WHERE gene_info_mouse.official_name = 'vlcad' OR gene_info_mouse.gene_info_alias like '%|vlcad|%';show index from gene_info_mouse ; show index from ipi_genes_mouse ;
其实就是,当用户输入一个ID的时候,可能是基因官方名,也可以是别名,所以就要在ipi_genes_mouse表的official_name 和 gene_info_alias中查找,如果找得到还要和ipi_genes_mouse表根据official_name列中相同的列中相同的official name值进行自然连接 official name直接更加输入来查找,如果是别名,因为有多个,我在保存数据的时候用了在每个别名两边加|的方面进行了分割,所以可以用输入加上||分割 然后使用like来查找到唯一的值。其实,建立索引和我这个问题无关,原因是,我如果在另一个记录不是这里的老鼠的信息的人类的表中可以很快的找到,而且,我分开写这个查询,大家明白我的意思吗?我在ipi和gene_info表中找到我的相应值,都只有一个。人类的那个表和这个一样用的想同数据格式。
还有就是,现在我用 SELECT * FROM gene_info_mouse left join ipi_genes_mouse on ipi_genes_mouse.official_name = gene_info_mouse.official_name WHERE gene_info_mouse.official_name = 'tp53' OR gene_info_mouse.gene_info_alias like '%|tp53|%' 可以找到信息, 但是,left join和natural join原理其实差不多。 也无法解释在人类那张份表中能找到,这里找不到, 见鬼了见鬼了
WHERE gene_info_mouse.official_name = 'vlcad' OR gene_info_mouse.gene_info_alias like '%|vlcad|%';show index from gene_info_mouse ;
show index from ipi_genes_mouse ;
official name直接更加输入来查找,如果是别名,因为有多个,我在保存数据的时候用了在每个别名两边加|的方面进行了分割,所以可以用输入加上||分割 然后使用like来查找到唯一的值。其实,建立索引和我这个问题无关,原因是,我如果在另一个记录不是这里的老鼠的信息的人类的表中可以很快的找到,而且,我分开写这个查询,大家明白我的意思吗?我在ipi和gene_info表中找到我的相应值,都只有一个。人类的那个表和这个一样用的想同数据格式。
SELECT * FROM gene_info_mouse left join ipi_genes_mouse on ipi_genes_mouse.official_name = gene_info_mouse.official_name
WHERE gene_info_mouse.official_name = 'tp53' OR gene_info_mouse.gene_info_alias like '%|tp53|%'
可以找到信息,
但是,left join和natural join原理其实差不多。
也无法解释在人类那张份表中能找到,这里找不到,
见鬼了见鬼了
另外,我现在用查询嵌套来查找了,没有问题