2014-10-05 37 views
0

我有這個查詢,將返回與托馬斯和他們的ID相關的所有人的列表。需要幫助將兩個函數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; 

我的目標是有一個查詢,將採取托馬斯作爲名稱,並返回,將有他的同事自己的身份證號碼,他們正在與相關人的數的三列。

同樣作爲一些額外的信息,這是一個非常大的數據庫,大約有400萬行和3億個關聯,所以任何一個查詢的速度都會大大增加。

回答

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 2014-10-05 02:50:12

+0

@ AndrewN-看到我更新的名稱。 – Lock 2014-10-05 03:31:29