目前,为了获取我需要的数据,我需要执行多个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])
第一个查询没问题,因为我只需要执行一次.但我想知道是否有办法结合(至少)最后三个查询.由于数据库相当大(约20 GB),我认为“好的查询”可能会大大加快速度.
我正在做的是:对于给定的pubkey_id / pubkey_hash,从同一行中获取包含此pubkey_id的txin_corr中的所有tx_ids.然后,从txin_corr获取所有pubkey_ids,其中行包含检索到的tx_ids.最后,获取现在检索到的pubkey_ids的所有pubkey_hash.
最佳答案 前面的答案是正确的:关键是多次将表连接在一起.但是,那里有一对多的关系,所以需要留下外连接,而不仅仅是内连接.
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)