2013-02-17 128 views
3

我有三個的MySQL表:mysql從一個查詢中的兩個表中統計記錄?

patient: 
    paID, paCode, paAccountID (foreign key) 

test 
    tsID, tsName, tsPatientID (foreign key), tsAccountID (foreign key) 

account 
    acID etc. 

現在我要計算paID數和被鏈接到特定acID=1tsID數量。有6 tsID和4 paID鏈接到acID=1

SELECT Count(paID) AS paCount FROM patient WHERE paAccountID=1 
SELECT Count(tsID) AS tsCount FROM test WHERE tsAccountID=1 

我試着去雙雙進入一個查詢......

SELECT Count(tsID) AS tsCount, Count(paID) AS paCount 
FROM test LEFT JOIN patient ON tsPatientID = paID 
WHERE tsAccountID=1 

不工作的方式,這兩點返回6.如何得到它的權利?

回答

4

我認爲這應該工作假設你的TSID並支付被獨特的鑰匙:

SELECT Count(DISTINCT t.tsID) AS tsCount, 
    Count(DISTINCT p.paID) AS paCount 
FROM account a 
    LEFT JOIN test t ON a.acId = t.tsAccountId 
    LEFT JOIN patient p ON a.acId = p.paAccountId 
WHERE a.acId = 1 

這裏是SQL Fiddle

請注意:未加入帳戶表(並將其用作主表)的問題是,如果測試表或患者表中沒有特定帳戶ID的數據,則查詢將返回0每個結果 - 可能不正確。

+0

酷,這是它,謝謝:-) – michi 2013-02-17 00:29:58

+0

@ michi - np,很高興我們可以幫助! – sgeddes 2013-02-17 00:32:07

0
SELECT 
    COUNT(DISTINCT tsID) AS tsCount, 
    COUNT(DISTINCT paID) AS paCount 
FROM 
    test 
    CROSS JOIN patient 
WHERE 
    tsAccountID = 1 
    AND paAccountID = 1 
+0

返回24對於這兩個計數,猜測它是不同的。 – michi 2013-02-17 00:28:05

+0

嘗試編輯查詢 – 2013-02-17 00:29:03

+0

@ExplosionPills - 我不會加入測試作爲您的主表 - 如果測試中沒有結果存在:http://sqlfiddle.com/#!2/417e1/1 - 我使用account as我的主表。除此之外,看起來不錯! – sgeddes 2013-02-17 00:31:29

-1

您的加入方法返回相關的所有行,這樣你的計數始終返回所有的行返回

在這種情況下

我會使用從(SELECT COUNT(*)的數量[表]其中[id = x])as [tsCount])在主選擇查詢中作爲字段..

相關問題