我对使用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
对吗?谢谢。
1条答案
按热度按时间dm7nw8vv1#
你要加入吗
asa
以及dist
. 检查它们的值以确保结果中只有匹配对是完全合乎逻辑的。所以,除非你有充分的理由你需要
dist.PDB
而不是asa.PDB
,命令看起来是正确的。如果这是正确的那么,这将是微不足道的,这将是毫无意义的这一部分检查在所有。当您识别bug时,您要么需要看到软件的行为问题,要么需要理解您正在查看的代码。
编辑
在select子句中可以使用
asa.PDB
或者dist.PDB
,因为两者相等,因为on
保证他们平等的条件。如果两者不同,那么这一对就不会出现在结果中。所以,就价值观而言,没有区别。但如果更直观的是dist.PDB
在select
,那么您可能想要更改它(这没有什么坏处,因为值完全相同),这样代码就更可读,而且以后,如果代码更改了,并且两者不再相等,您就不会有新的bug了。