Возможная ошибка в команде Select InterfaceDist
Я новичок в использовании 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
Это верно? Благодарю.
1 ответ
Вы присоединяетесь asa
а также dist
, Совершенно логично, что их значения проверяются, чтобы убедиться, что в результате будут только совпадающие пары. Так что, если у вас нет очень веских причин думать, что в очереди
dist.PDB=asa.PDB
тебе нужно dist.PDB
вместо asa.PDB
, команда выглядит правильно. И если это будет правильно
dist.PDB=dist.PDB
тогда это было бы тривиально, и было бы бессмысленно вообще проверять эту часть. Когда вы обнаруживаете ошибки, вам нужно либо увидеть поведенческие проблемы программного обеспечения, либо понять код, который вы просматриваете.
РЕДАКТИРОВАТЬ
В предложении select можно использовать asa.PDB
или же dist.PDB
потому что оба равны из-за on
условие, обеспечивающее их равенство. Если они разные, то пары в результате не будет. Таким образом, с точки зрения ценностей это не имеет значения. Но если это более интуитивно, чтобы иметь dist.PDB
в select
, тогда вы можете захотеть изменить его (в этом нет никакого вреда, потому что значение точно такое же), поэтому код будет более читабельным и позже, если код будет изменен, и эти два больше не будут равны, у вас не будет новых ошибок из голубого неба.