Возможная ошибка в команде 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, тогда вы можете захотеть изменить его (в этом нет никакого вреда, потому что значение точно такое же), поэтому код будет более читабельным и позже, если код будет изменен, и эти два больше не будут равны, у вас не будет новых ошибок из голубого неба.

Другие вопросы по тегам