2014-10-05 4 views
0

У меня есть этот запрос, который вернет список всех людей, связанных с Томасом и их идентификаторами.Нужна помощь в объединении двух функциональных запросов mysql в один?

SELECT c.name, c.ID 
FROM namesandID s, associations o, namesandID c 
WHERE s.name='Thomas' AND o.id = s.ID AND o.associateID = c.ID 
GROUP BY c.ID; 

Тогда у меня есть запрос, что я могу вручную ввести номер id, и он вернет правильный подсчет ассоциированных элементов.

SELECT count(*) FROM (
    SELECT associateID FROM associations WHERE id=18827 GROUP BY associateID 
) AS t; 

Моя цель состоит в том, чтобы иметь один запрос, который будет принимать Томас в качестве имени и вернуть три колонки, которые будут иметь его ассоциировать их идентификационный номер в число людей, с которыми они связаны.

Также в качестве дополнительной информации это очень большая база данных с примерно 4 миллионами рядов и 300 миллионов ассоциаций, поэтому любое увеличение скорости по любому из этих запросов будет очень приветствоваться.

ответ

0

не очень эффективным, но

SELECT c.name, c.ID, COUNT(DISTINCT o.associateID) 
FROM {the rest of the first query} 

должен сделать трюк.

1

Не тестировался, однако ниже, должны работать:

select 
    c.name, 
    c.id, 
    assoc_count.cnt 
from 
    namesandIds s 
inner join 
    associations o on 
    o.id = s.ID 
inner join 
    namesandId c on 
    c.ID = o.associateId 
left outer join 
(
    select 
    id, 
    count(distinct associateId) as cnt 
    from 
    associations 
    group by 
    id 
) assoc_count on 
    assoc_count.id = c.ID 
where 
    s.name = 'Thomas' 
+0

это выглядит хорошо, но я не могу понять, где указать имя, которое я ищу – AndrewN

+0

@ AndrewN- Смотрите мое обновление. – Lock

Смежные вопросы