Я не уверен, правильно ли я сформулировал это, но вот моя дилемма. Я унаследовал приложение, которое должно искать компанию, связанную с каждым контактом в списке. В том виде, в каком оно написано сейчас, приложение запрашивает БД по следующим вопросам:
SELECT c.name
FROM company c
WHERE c.id = (SELECT u.company_id
FROM user u
WHERE u.login_id = ?);
Проблема в том, что ему нужно искать тысячи пользователей, поэтому выполнение этого запроса по одному действительно неэффективно. Я бы хотел выполнить 1 такой запрос:
SELECT c.name
FROM company c
WHERE c.id = (SELECT u.company_id
FROM user u
WHERE u.login_id IN LIST (?,?,?...));
Но я не знаю, как затем сопоставить список пользователей с резервной копией компании? Как мне заставить его выбрать совпадающий login_id вместе с именем?
ОБНОВЛЕНИЕ: Как применить ответ ниже к более сложному запросу, который извлекает информацию о контракте из другой БД? Текущий полный запрос выглядит так (он также извлекает несколько строк, по одной для каждого активного уровня контракта. В конце концов, я также хочу, чтобы он объединял их в 1 со списком всех типов контрактов, чтобы затем я мог запустить grep для этого поля для «самый высокий» (если нет способа выполнить произвольную сортировку в SQL и вернуть только первый): Что было бы эффективным способом сделать это, при условии, что граф большой (мьютекс ...)? Методы BGL не ...
Мне нужно перебрать вершины и ребра BGL adjacency_list из нескольких потоков. Что было бы эффективным способом сделать это, при условии, что граф большой (мьютекс ..)?
Методы BGL не поддерживают реентерабельные вызовы?