4

現在、必要なデータを取得するには、複数のSQLステートメントを実行する必要があります。

SELECT pubkey.pubkey_id 
FROM pubkey 
WHERE pubkey.pubkey_hash = (input data [1])

SELECT txin_corr.tx_id 
FROM txin_corr 
WHERE txin_corr.pubkey_id = (pubkey.pubkey_id from previous query [max. 1])

SELECT txin_corr.pubkey_id 
FROM txin_corr 
WHERE txin_corr.tx_id = (txin_corr.tx_id from prev.qry. [n])

SELECT pubkey.pubkey_hash
FROM pubkey 
WHERE pubkey.pubkey_id = (txin_corr.pubkey_id from prev.qry. [n])

最初のクエリは1回だけでよいので、問題ありません。しかし、(少なくとも)最後の3つのクエリを組み合わせる方法があるかどうか疑問に思っています。dbはかなり大きい(〜20 GB)ので、「適切なクエリ」によって処理が大幅に高速化される可能性があると思います。

私がしていることは次のとおりです。特定のpubkey_id/について、同じ行にこれを含むpubkey_hashすべてtx_idのsを取得します。次に、取得したsが行に含まれている場所からすべてのsを取得します。最後に、現在取得されているのすべてのを取得します。txin_corrpubkey_idpubkey_idtxin_corrtx_idpubkey_hashpubkey_id

4

3 に答える 3

2

前の答えは正しいです。重要なのは、テーブルを複数回結合することです。ただし、そこには 1 対多の関係があるため、内部結合だけでなく外部結合も残す必要があります。

SELECT pk2.pubkey_hash
FROM   pubkey pk
INNER JOIN txin_corr tc ON pk.pubkey_id = tc.pubkey_id
LEFT OUTER JOIN txin_corr tc2 ON tc.tx_id = tc2.tx_id
LEFT OUTER JOIN pubkey pk2 ON tc2.pubkey_id = pk2.pubkey_id
WHERE pk.pubkey_hash = (input data)
于 2012-11-27T23:00:09.843 に答える
0

これが1つの方法です。これが最も効率的な方法であると断言するつもりはありませんが、どのデータベースでも機能するはずです。

秘訣は、異なるプレフィックスを使用して各テーブルに複数回参加することです。これにより、毎回異なる列のセットと照合できます。したがって、最初の pubkey_id と一致するように txin_corr に参加し、次に再度参加して、関連する ID の完全なリストを取得します。次に、「out」を pubkey に戻して、この新しい ID リストに一致するレコードを取得します。

SELECT  pk2.pubkey_hash 
FROM    pubkey pk
INNER JOIN txin_corr tc on pk.pubkey_id = tc.pubkey_id
INNER JOIN txin_corr tc2 on tc.tx_id = tc2.tx_id
INNER JOIN pubkey pk2 on tc2.pubkey_id = pk2.pubkey_id
WHERE pk.pubkey_hash = (input data)
于 2012-11-27T19:20:39.320 に答える
0

これは最善の方法ではないかもしれませんが、すべての選択を連鎖させることができます。いずれかのクエリが複数の結果を返す場合は、リレーションシップを = から in に変更するだけで、複数の結果を処理できます

SELECT pubkey.pubkey_hash
FROM pubkey 
WHERE pubkey.pubkey_id = 
        (SELECT txin_corr.pubkey_id 
         FROM txin_corr 
         WHERE txin_corr.tx_id =
                (SELECT txin_corr.tx_id 
                 FROM txin_corr 
                 WHERE txin_corr.pubkey_id = 
                        (SELECT pubkey.pubkey_id 
                         FROM pubkey 
                         WHERE pubkey.pubkey_hash = (input data [1]
                         )
                 )
         )
于 2012-11-27T19:47:32.670 に答える