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])在主选择查询中作为字段..

相关问题