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

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

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 и только вернуть первый):

SELECT c.id,
       c.name,
       cs.id,
       cs.name,
       csc.contract_type,
       csc.contract_status
FROM   company c,
       company_site cs,
       company_site_contract csc
WHERE  c.id = cs.company_id
       AND cs.id = csq.site_id
       AND csc.contract_status = 'ACTIVE'
       AND cs.site_id IN (SELECT   cs.site_id
                            FROM   user u,
                                   contact c,
                                   company_site cs
                            WHERE  c.id = u.company_id
                                   AND cs.id = c.site_id
                                   AND u.login_id = ?);
1
задан Raugturi 4 October 2010 в 19:36
поделиться