Как мне включить совпавший элемент из списка в подвыборке?

Я не уверен, правильно ли я сформулировал это, но вот моя дилемма. Я унаследовал приложение, которое должно искать компанию, связанную с каждым контактом в списке. В том виде, в каком оно написано сейчас, приложение запрашивает БД по следующим вопросам:

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 не поддерживают реентерабельные вызовы?

1
задан rambo 4 October 2010 в 18:56
поделиться