我是使用SQL的新手。我想知道此程序中是否可能存在错误。
/* 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
对吗?谢谢。
答案 0 :(得分:0)
您正在加入asa
和dist
。逻辑上检查它们的值以确保结果中仅匹配对是合乎逻辑的。因此,除非您有充分的理由认为这一点
dist.PDB=asa.PDB
您需要dist.PDB
而不是asa.PDB
,此命令看起来是正确的。如果这是正确的
dist.PDB=dist.PDB
那么这将是微不足道的,并且完全检查这一部分将毫无意义。识别错误时,您要么需要查看软件的行为问题,要么需要了解正在查看的代码。
编辑
在select子句中,可以使用asa.PDB
或dist.PDB
,因为由于on
条件确保它们相等,因此两者相等。如果两者不同,则该对将不在结果中。因此,就价值而言,这没有什么区别。但是,如果在dist.PDB
中包含select
更直观,则您可能希望对其进行更改(其中无害,因为值完全相同),因此代码会更多可读性强,以后,如果更改了代码,并且两者不再必须相等,那么您将不会遇到新的错误。