2012-07-02 53 views
0

我有表合同c(id,exp_date)和表成員m(id,cid)。 我需要計算所有合同和所有成員一起加入m.cid = c.id上的兩個表。mysql連接2個表並計算每個表的所有行

我試過,但因爲它返回兩個表中的一個相同的計數結果顯然不是不對

SELECT count(m.id) as totmembers , count(c.id) as totcontracts 
from members m 
join contracts c on m.cid = c.id 
where DATEDIFF(c.im_exp, CURDATE()) > 0 

結果應該是類似5000個合約,12.000成員,但我得到12.000兩個totmembers和totcontracts。

+0

您是否想在這兩個領域共'計數()',或對他們的'計數(不同)'? – vyegorov

+0

@vyegorov:我想總計 – bikey77

回答

0

如果您創建了INNER JOIN語句。用SELECT列表中的兩個單獨查詢創建一個新查詢。

SELECT (SELECT ... WHERE ...) AS totmembers, (SELECT ... WHERE ...) AS totcontracts 
+0

爲了在第二個子查詢中工作的位置,我需要將表成員連接到表合同。 – bikey77

+1

這是真的,在2個子查詢中單獨做。 –

+0

你的意思是這樣的?不認爲它會起作用... SELECT(COUNT(*)from aitisi a WHERE a.im_exp> CURRENT_DATE)AS totcontracts, (SELECT count(*)from members m join aitisi a on a.id = m.symbid where DATEDIFF(a.im_exp,CURDATE())> 0)AS總數 – bikey77

1

試試這個:

SELECT count(m.id) as totmembers , count(distinct c.id) as totcontracts 
from members m 
join contracts c on m.cid = c.id 
where DATEDIFF(c.im_exp, CURDATE()) > 0