SQL选择多个ids firebird

时间:2014-05-23 18:20:43

标签: c++ sql firebird2.5

我在我的C ++项目中使用firebird SQL(我在SQL中使用newby)。 我有两行表:

|  aID  |  bID |
----------------
|   1   |  2   |
|   1   |  3   |
|   2   |  1   |
|   2   |  2   |
|   2   |  7   |
|   5   |  2   |
|   1   |  7   |
|  ...  |  ... |
................

其中aID和bID与NxN相关(多个到多个)。 (0< aID,bID< = 10 ^ 6)。

现在,我有一组bID&#39; s(b0,b1,b2,... bK),其中0 <= K <= 10 ^ 5.

需要一个与bi相关的唯一aID设置(0 <= i&lt; = K)。

我使用未经优化的方式(C ++):

std::vector<int> bIDs; // given bID's set.

std::set<int> aIDs; // result;

for(std::size_t ix = 0; ix < bIDs.size(); ++ix)
{
       std::vector<int> localAIDs = m_SQLManager.getAIds(bIDs[ix]);
       aIDs.insert( localAIDs.begin(), localAIDs.end() );
}
// where m_SQLManager.getAIDs use for given bi
//"SELECT aID from mytable where bID = bi"  query.

问:我可以通过一个简单的SELECT操作获得唯一的aID设置吗?

我以为

"SELECT aID from mytable where bID in ( <here count all bi > )" 

但是,当K-number变大(10 ^ 5)时,我现在不知道查询字符串有多大,我也不知道Firebird可以或不能支持大字符串查询。

感谢。

1 个答案:

答案 0 :(得分:2)

这样做你想要的吗?

select distinct aID
from mytable
where bID between 0 and k;

编辑:

将您的bEd加载到(临时)表中并执行:

select distinct t.aID
from mytable t join
     TempBids tb
     on t.bID = tb.bID;