select interfacedist命令中可能存在的错误

whitzsjs  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(652)

我对使用sql还不熟悉。我想知道这个程序中是否有bug。

/* Insert to interface table all atoms that have diffASA>0*/
insert into NinterfaceAtom(PDB,Chain,Residue,ResId,Symbol,atom,diffASA)
select PDB,Chain,Residue,ResId,Symbol,Atom,max(ASA)-min(ASA) from perAtomASA
group by PDB,Chain,Residue,ResId,Symbol,Atom
having stddev(ASA)>0;
/* Insert to interface table all atoms that have enough distance */
insert ignore into NinterfaceAtoms (PDB,Chain,Residue,ResId,Symbol,atom)
select asa.PDB,asa.Chain,asa.Residue,asa.ResId,asa.Symbol,dist.Atom from interfaceDist dist
inner join
    perAtomASA asa
on
    dist.PDB=asa.PDB and
    dist.Chain=asa.Chain and
    dist.ResId=asa.ResId and
    dist.Symbol=asa.Symbol and
    Seperated=0

我只是不知道为什么在我之前的程序员把asa.pdb而不是dist.pdb放在内部连接部分。我在想第八行应该改成:

select asa.PDB,asa.Chain,asa.Residue,asa.ResId,asa.Symbol,dist.Atom from interfaceDist dist

收件人:

select dist.PDB,dist.Chain,dist.Residue,dist.ResId,dist.Symbol,dist.Atom from interfaceDist dist

对吗?谢谢。

dm7nw8vv

dm7nw8vv1#

你要加入吗 asa 以及 dist . 检查它们的值以确保结果中只有匹配对是完全合乎逻辑的。所以,除非你有充分的理由

dist.PDB=asa.PDB

你需要 dist.PDB 而不是 asa.PDB ,命令看起来是正确的。如果这是正确的

dist.PDB=dist.PDB

那么,这将是微不足道的,这将是毫无意义的这一部分检查在所有。当您识别bug时,您要么需要看到软件的行为问题,要么需要理解您正在查看的代码。
编辑
在select子句中可以使用 asa.PDB 或者 dist.PDB ,因为两者相等,因为 on 保证他们平等的条件。如果两者不同,那么这一对就不会出现在结果中。所以,就价值观而言,没有区别。但如果更直观的是 dist.PDBselect ,那么您可能想要更改它(这没有什么坏处,因为值完全相同),这样代码就更可读,而且以后,如果代码更改了,并且两者不再相等,您就不会有新的bug了。

相关问题