0

chado 構造の mysql データベースにアクセスしています。遺伝子産物で検索すると、この例では、産物は「二機能性 GDP-フコース合成酵素: GDP-4-デヒドロ-6-デオキシ-D-マンノース エピメラーゼおよび GDP-4-デヒドロ-6-L-デオキシガラクトース レダクターゼ」です。

次に、JOIN ステートメントを使用して、この遺伝子が配置されているアセンブリとその座標を見つけることができます。以下の SQL ステートメントは有効で、アセンブリのシーケンス (遺伝子のシーケンスだけでなく)、およびアセンブリ上の目的の遺伝子の開始位置と停止位置を返します。

SELECT f.uniquename AS protein_accession, product.value AS protein_name, srcfeature.residues AS residue_sequence, srcassembly.name AS source_type, location.fmin AS location_min, location.fmax AS location_max, location.strand
FROM feature f
JOIN cvterm polypeptide ON f.type_id=polypeptide.cvterm_id
JOIN featureprop product ON f.feature_id=product.feature_id
JOIN cvterm productprop ON product.type_id=productprop.cvterm_id
JOIN featureloc location ON f.feature_id=location.feature_id
JOIN feature srcfeature ON location.srcfeature_id=srcfeature.feature_id
JOIN cvterm srcassembly ON srcfeature.type_id=srcassembly.cvterm_id
WHERE polypeptide.name = 'polypeptide'
AND productprop.name = 'gene_product_name'
AND product.value LIKE '%bifunctional GDP-fucose synthetase: GDP-4-dehydro-6-deoxy-D-mannose epimerase and GDP-4-dehydro-6-L-deoxygalactose reductase%';

組み立てシーケンスは非常に長く、すべてを必要とするわけではありません。MySQL の SUBSTRING メソッドを使用して必要な部分を抽出し、シーケンス全体の取得を節約するか、取得後にプログラミング言語の部分文字列メソッドを使用する方がよいでしょうか? 以下のクエリは、位置と長さのクエリ中に取得した値を使用して、SUBSTRING メソッドで試みたものです。動作しません。動作するには複数の SELECT ステートメントが必要だと思います。SQL は非常に見苦しくなっており、動作する最終結果がより良いものになるかどうかさえわかりません。

SQL SUBSTRING でこれを行う方が良いですか、それともプログラミング言語と部分文字列メソッドを使用して、すべてを取得したにもかかわらず、必要なものを表示する方がよいでしょうか?

SELECT f.uniquename AS protein_accession, product.value AS protein_name, SUBSTRING(srcfeature.residues AS residue_sequence, location_min, location_max - location_min), srcassembly.name AS source_type, location.fmin AS location_min, location.fmax AS location_max, location.strand
FROM feature f
JOIN cvterm polypeptide ON f.type_id=polypeptide.cvterm_id
JOIN featureprop product ON f.feature_id=product.feature_id
JOIN cvterm productprop ON product.type_id=productprop.cvterm_id
JOIN featureloc location ON f.feature_id=location.feature_id
JOIN feature srcfeature ON location.srcfeature_id=srcfeature.feature_id
JOIN cvterm srcassembly ON srcfeature.type_id=srcassembly.cvterm_id
WHERE polypeptide.name = 'polypeptide'
AND productprop.name = 'gene_product_name'
AND product.value LIKE '%bifunctional GDP-fucose synthetase: GDP-4-dehydro-6-deoxy-D-mannose epimerase and GDP-4-dehydro-6-L-deoxygalactose reductase%';

編集 これは、異なる遺伝子(短い名前)の結果の例です。その部分は数千文字の長さであるため、クエリされたシーケンスの部分を省略しました。ここに示す location_min と location_max の値を SUBSTRING に適切に使用する必要があります。

+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
| protein_accession | protein_name                                      | source_type | location_min | location_max | strand |
+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
| ECDH10B_0026      | bifunctional riboflavin kinase and FAD synthetase | assembly    |        21406 |        22348 |      1 |
+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
4

2 に答える 2

1

あなたasは間違った場所にいました。の閉じ括弧の後に移動する必要がありますsubstring()

SELECT f.uniquename AS protein_accession, product.value AS protein_name,
       SUBSTRING(srcfeature.residues, location_min, location_max - location_min)  AS residue_sequence,
       srcassembly.name AS source_type, location.fmin AS location_min, location.fmax AS location_max, location.strand
FROM feature f
JOIN cvterm polypeptide ON f.type_id=polypeptide.cvterm_id
JOIN featureprop product ON f.feature_id=product.feature_id
JOIN cvterm productprop ON product.type_id=productprop.cvterm_id
JOIN featureloc location ON f.feature_id=location.feature_id
JOIN feature srcfeature ON location.srcfeature_id=srcfeature.feature_id
JOIN cvterm srcassembly ON srcfeature.type_id=srcassembly.cvterm_id
WHERE polypeptide.name = 'polypeptide'
AND productprop.name = 'gene_product_name'
AND product.value LIKE '%bifunctional GDP-fucose synthetase: GDP-4-dehydro-6-deoxy-D-mannose epimerase and GDP-4-dehydro-6-L-deoxygalactose reductase%';

他の質問については、不要なデータをアプリケーションに返すよりも、クエリで必要なデータを抽出する方がはるかに理にかなっていると思います。これにより、通信のオーバーヘッドが節約されます。さらに、複数のスレッド/プロセッサを使用している場合、データベースを並行して実行する機会があります。

于 2013-04-23T20:57:50.657 に答える
0

このようなものがうまくいく場合:

SELECT f.uniquename AS protein_accession, 
       product.value AS protein_name, 
       SUBSTRING(
                   srcfeature.residues, 
                   patindex('%SOMPATTERN%',srcfeature.residues), 
                   LEN(srcfeature.residues) - patindex('%SOMPATTERN%',srcfeature.residues)
                ) AS residue_sequence, 
      srcassembly.name AS source_type, 

次に、SQLでそれを試してください。そうでない場合は、アプリケーション プログラミング言語を使用します。

于 2013-04-23T20:56:08.793 に答える