mysql从一个查询中的两个表中统计记录?
问题描述:
我有三个的MySQL表:mysql从一个查询中的两个表中统计记录?
patient:
paID, paCode, paAccountID (foreign key)
test
tsID, tsName, tsPatientID (foreign key), tsAccountID (foreign key)
account
acID etc.
现在我要计算paID
数和被链接到特定acID=1
的tsID
数量。有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.如何得到它的权利?
答
我认为这应该工作假设你的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每个结果 - 可能不正确。
答
SELECT
COUNT(DISTINCT tsID) AS tsCount,
COUNT(DISTINCT paID) AS paCount
FROM
test
CROSS JOIN patient
WHERE
tsAccountID = 1
AND paAccountID = 1
答
您的加入方法返回相关的所有行,这样你的计数始终返回所有的行返回
在这种情况下我会使用从(SELECT COUNT(*)的数量[表]其中[id = x])as [tsCount])在主选择查询中作为字段..
酷,这是它,谢谢:-) – michi 2013-02-17 00:29:58
@ michi - np,很高兴我们可以帮助! – sgeddes 2013-02-17 00:32:07