我在我的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可以或不能支持大字符串查询。
感谢。
答案 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;