SQL выбрать несколько идентификаторов Firebird

Я использую Firebird SQL в моем проекте C ++ (я новичок в SQL).
У меня есть таблица с двумя строками:

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

который aID и bID связаны как NxN (несколько к нескольким). (0 < помощь, заявка <= 10 ^ 6).

Теперь у меня есть набор bID (b0, b1, b2, … bK), где 0<= К <= 10 ^ 5.

Нужен уникальный набор AID, который связан с любым из би (0<= я <= К).

Я использую неоптимизированный способ (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.

Q: я могу получить уникальный набор идентификаторов с помощью одной простой операции SELECT?

я думал так

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

но я не знаю, насколько большой будет строка запроса, когда K — число b станет большим (10 ^ 5), и я не знаю, что Firebird может или не может поддерживать запрос большой строки.

Благодарю.

0

Решение

Это делает то, что ты хочешь?

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

РЕДАКТИРОВАТЬ:

Загрузите ваш bid в (временную) таблицу и выполните:

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

Другие решения


По вопросам рекламы [email protected]